* doc/invoke.texi: Document -std=c++17 and -std=gnu++17 and document
[official-gcc.git] / gcc / testsuite / g++.dg / torture / stackalign / eh-inline-2.C
blobe630f338c54eb0f2792e88ace3c3e66d48324be2
1 /* { dg-do run } */
2 /* { dg-skip-if "Stack alignment is too small" { hppa*-*-hpux* } } */
4 #include "check.h"
6 #ifndef ALIGNMENT
7 #define ALIGNMENT       64
8 #endif
10 typedef int aligned __attribute__((aligned(ALIGNMENT)));
12 int global;
14 void
15 bar (char *p, int size)
17   __builtin_strncpy (p, "good", size);
20 class Base {};
22 struct A : virtual public Base
24   A() {}
27 struct B {};
29 static void
30 inline __attribute__((always_inline))
31 foo (int size)
32 #if __cplusplus <= 201402L
33 throw (B,A)                     // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } }
34 #endif
36   char *p = (char *) __builtin_alloca (size + 1);
37   aligned i;
39   bar (p, size);
40   if (__builtin_strncmp (p, "good", size) != 0)
41     {
42 #ifdef DEBUG
43       p[size] = '\0';
44       printf ("Failed: %s != good\n", p);
45 #endif
46       abort ();
47     }
49   if (check_int (&i,  __alignof__(i)) != i)
50     abort ();
52   throw A();
55 int
56 main()
58   try { foo (5); }
59   catch (A& a) { }
60   return 0;