1 /* { dg-do run } */
2
3 #include "check.h"
4
5 #ifndef ALIGNMENT
6 #define ALIGNMENT 64
7 #endif
8
9 typedef int aligned __attribute__((aligned(ALIGNMENT)));
10
11 int global;
12
13 void
bar(char * p,int size)14 bar (char *p, int size)
15 {
16 __builtin_strncpy (p, "good", size);
17 }
18
19 class Base {};
20
21 struct A : virtual public Base
22 {
AA23 A() {}
24 };
25
26 struct B {};
27
28 static void
29 inline __attribute__((always_inline))
foo(int size)30 foo (int size) throw (B,A)
31 {
32 char *p = (char *) __builtin_alloca (size + 1);
33 aligned i;
34
35 bar (p, size);
36 if (__builtin_strncmp (p, "good", size) != 0)
37 {
38 #ifdef DEBUG
39 p[size] = '\0';
40 printf ("Failed: %s != good\n", p);
41 #endif
42 abort ();
43 }
44
45 if (check_int (&i, __alignof__(i)) != i)
46 abort ();
47
48 throw A();
49 }
50
51 int
main()52 main()
53 {
54 try { foo (5); }
55 catch (A& a) { }
56 return 0;
57 }
58