Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.old-deja/g++.other/optimize2.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run } // { dg-options "-O2" } // // Copyright (C) 2001 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 26 May 2001 <nathan@codesourcery.com> // Bug 2823. Inlineing the body of a thunk broke things. But that's // rarely a sensible thing to do anyway. #include <cstdio> #include <cstdlib> int objCount = 0; struct Thing { int count; Thing (); Thing (Thing const &src); ~Thing (); }; Thing::Thing () :count (0) { objCount++; std::printf ("%p %s\n", (void *)this,__PRETTY_FUNCTION__); } Thing::Thing (Thing const &src) :count (0) { objCount++; std::printf ("%p %s\n", (void *)this, __PRETTY_FUNCTION__); } Thing::~Thing () { std::printf ("%p %s\n", (void *)this, __PRETTY_FUNCTION__); if (count) std::abort (); count--; objCount--; } void x(Thing name) { // destruct name here } class Base { public: virtual void test(const Thing& s) = 0; }; class Impl : virtual public Base { public: virtual void test(const Thing& s) { x(s); // copy construct temporary } }; int main() { Impl *impl = new Impl(); impl->test( Thing ()); // This will use a thunk return objCount != 0; }