OSDN Git Service

PR c++/34774
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / opt / pr15054.C
1 // PR middle-end/15054
2 // This used to abort due to overlapping stack temporaries.
3
4 // { dg-do run }
5 // { dg-options "-O" }
6
7 extern "C" void abort (void);
8
9 struct pointer
10 {
11   void* ptr;
12
13   pointer(void* x = 0) : ptr(x) {}
14   pointer(const pointer& x) : ptr(x.ptr) {}
15 };
16
17 struct element
18 {
19   int canary;
20
21   element() : canary(123) { }
22   ~element() { pointer(); if (canary != 123) abort (); }
23 };
24
25 inline pointer
26 insert(const element& x)
27 {
28   return pointer(new element(x));
29 }
30
31 int
32 main (void)
33 {
34   insert(element());
35   return 0;
36 }