From patchwork Fri May 16 23:58:21 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xinliang David Li X-Patchwork-Id: 349839 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4F38F140090 for ; Sat, 17 May 2014 09:58:32 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:cc:content-type; q=dns; s=default; b=V0xM/yF2hujpBhYiC9k81X3eSYa9PbQR2pc7WKaG1ig mVxTSk+hWN0F4cbGUsjKKuIqeLL6IYlLSj5ot3MblQ52JMvHqwolEsBgg8JtnEGz ZG8R5Mv03nXSVDrJQ6NlwoX3b194MT099aq8L/W2LNGmT77JIyBdTegJQuXPD5+U = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:cc:content-type; s=default; bh=Gwitqxg4sjGjVccMU6kw/4DgPsw=; b=Z/SJZIHMpKkRDokHl eBHj/igrFCManDRJ5nbVfsSFi8HSJTsxJPpN7CcdNmwOCHM/3t/+MgEffGVlM9zd zBjwtlC7/XpbzEwX/b+8zNiXESfDxfAko4HgA2v3rn7tlsK2qMEScVa3ZDrJlI8L 04BGw663bDpQ+qqILEjAcklcGI= Received: (qmail 23968 invoked by alias); 16 May 2014 23:58:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 23956 invoked by uid 89); 16 May 2014 23:58:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-we0-f176.google.com Received: from mail-we0-f176.google.com (HELO mail-we0-f176.google.com) (74.125.82.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 16 May 2014 23:58:24 +0000 Received: by mail-we0-f176.google.com with SMTP id q59so3272470wes.35 for ; Fri, 16 May 2014 16:58:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to:cc :content-type; bh=3yMW4JQ/1e3bDil7dylWxcWula9GR9k519IYtb/caRg=; b=Fh6PiMU56ZN2KWZ0fillNJ1/79j9Vvfj1WmWNv4OyEDZaupcNu/155PtVeD2n2x6d0 UpuNlje1c1uEUpX2vxBSEswuuDqbj06sR3x366o+e3ZRmixbinQyjTFY3cdC15ota/T6 2snNKSp1ts2AZB2B/KkVBkLyeFtrTu/m19eAnO6hG4SH1OrUEhQTec6Xd/qQsprQ0h4i dKzuTHvAZ9oqFdNqvzEj6ssuErebRioBwjth5Ro7acZwKD8cqnsoc90Vba0HK2JE5sU/ QBJDxWh8AksMx/9YBGbWX8o9XUYl/s6QwwFCljoEVAPgkX7JGXX2I/6MHHAU61H35gF0 iPYw== X-Gm-Message-State: ALoCoQnBNi9w1+xk7mX9KoBN1Oy8nPYwS5t2oi0AUrch1eakiwOWkZ5bat/O93St3ljiu2dvyQgv MIME-Version: 1.0 X-Received: by 10.180.12.238 with SMTP id b14mr731413wic.16.1400284701153; Fri, 16 May 2014 16:58:21 -0700 (PDT) Received: by 10.180.86.1 with HTTP; Fri, 16 May 2014 16:58:21 -0700 (PDT) Date: Fri, 16 May 2014 16:58:21 -0700 Message-ID: Subject: Add a new test From: Xinliang David Li To: GCC Patches Cc: Jan Hubicka X-IsSubscribed: yes This test makes sure compiler does not wrongly devirtualize virtual calls into __cxa_pure_virtual or __buitlin_unreachable. Ok to checkin? David Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 210479) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,7 @@ +2014-05-16 Xinliang David Li + + * g++.dg/ipa/devirt-33.C: New testcase. + 2014-05-15 Martin Jambor PR ipa/61085 Index: testsuite/g++.dg/ipa/devirt-33.C =================================================================== --- testsuite/g++.dg/ipa/devirt-33.C (revision 0) +++ testsuite/g++.dg/ipa/devirt-33.C (revision 0) @@ -0,0 +1,78 @@ +/* Verify we do not devirtualize wrongly to __cxa_pure_virtual */ + +/* { dg-do run } */ +/* { dg-options "-O2 -std=c++11" } */ + + +inline void* operator new(__SIZE_TYPE__ s, void* buf) throw() { + return buf; +} + +class A { + +private: + struct Base { + virtual ~Base() {} + virtual Base *Clone(void *buf) const = 0; + virtual float *Allocate(__SIZE_TYPE__ count) = 0; + }; + + struct Value : Base { + virtual ~Value (){} + Base *Clone(void* buf) const override { + return new (buf) Value(); + } + + float *Allocate(__SIZE_TYPE__ count) override { + return new float[count]; + } + }; + +public: + A() { + new (buffer_) Value(); + } + A(const A& other) { + other.ptr()->Clone(buffer_); + } + + float *Allocate() { + return ptr()->Allocate(100); + } + const Base *ptr() const { return reinterpret_cast(buffer_);} + Base *ptr() { return reinterpret_cast< Base*>(buffer_);} + +private: + alignas(16) char buffer_[1024]; +}; + + +struct B { + B (const A& a) : a_(a) { + buff_ = a_.Allocate(); + } + + float *buff_; + A a_; +}; + +struct Dummy { + int i; +}; + +struct D : public Dummy { + __attribute__((noinline)) D( const A&a); + + B b_; +}; + +D::D(const A&a) : b_(a) {} + +int main() +{ + A a; + D d(a); + + return 0; +} +