strub: enable conditional support
[official-gcc.git] / gcc / testsuite / g++.dg / torture / alias-1.C
blob2abe543851092c0a97bfa308195f8ee23e4c7ce2
1 // Verify we don't try to allocate the same stack slot for
2 // buf1 and buf2 in qux.  While there is a CLOBBER stmt for buf1
3 // from inlined destructor, the buf1 variable doesn't go out of scope
4 // until after the baz call.
5 // { dg-do run }
7 #include <new>
8 #include <cstring>
9 #include <cstdlib>
11 char *p;
12 struct S { char buf[128]; S () { memset (buf, ' ', 128); }; ~S () {}; };
14 __attribute__((noipa)) void
15 foo (char *x)
17   p = x;
20 __attribute__((noipa)) int
21 bar (S *x)
23   return x->buf[12];
26 __attribute__((noipa)) void
27 baz (char *x)
29   S *a = new (p) (S);
30   S *b = new (x) (S);
31   memset (a->buf, '0', 128);
32   memset (b->buf, '1', 128);
33   if (bar (a) != '0' || bar (b) != '1')
34     abort ();
35   b->~S ();
36   a->~S ();
39 __attribute__((noipa)) void
40 qux ()
42   char buf1[128];
43   foo (buf1);
44   S *p = new (buf1) (S);
45   bar (p);
46   p->~S ();
47   {
48     char buf2[128];
49     baz (buf2);
50   }
53 int
54 main ()
56   qux ();