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 void
foo(int size)29 foo (int size) throw (B,A)
30 {
31 char *p = (char*) __builtin_alloca (size + 1);
32 aligned i;
33
34 bar (p, size);
35 if (__builtin_strncmp (p, "good", size) != 0)
36 {
37 #ifdef DEBUG
38 p[size] = '\0';
39 printf ("Failed: %s != good\n", p);
40 #endif
41 abort ();
42 }
43
44 if (check_int (&i, __alignof__(i)) != i)
45 abort ();
46
47 throw A();
48 }
49
50 int
main()51 main()
52 {
53 try { foo (5); }
54 catch (A& a) { }
55 return 0;
56 }
57