PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / ubsan / pr70147-2.C
blob4e858a52d5a2fc9e74bc5262d21275d51b460cb7
1 // PR c++/70147
2 // { dg-do run }
3 // { dg-skip-if "" { *-*-* }  { "*" } { "-O0" } }
4 // { dg-options "-fsanitize=vptr" }
6 struct A
8   A () : a (0) {}
9   A (int x) : a (x) {}
10   virtual void f () {}
11   virtual int i () { int r = 0; __asm ("" : "+r" (r)); return r; }
12   int a;
14 struct E
16   E () : e (0) {}
17   E (int x) : e (x) {}
18   virtual void f () {}
19   virtual int g () { int r = 0; __asm ("" : "+r" (r)); return r; }
20   int e;
22 struct F
24   F () : f (0) {}
25   F (int x) : f (x) {}
26   virtual int h () { int r = 0; __asm ("" : "+r" (r)); return r; }
27   int f;
29 struct B : virtual A, public E, public F
31   B ()
32     : E (
33          g ()
34          + h ()
35          + i ()
36         ),
37       F (g ()
38          + h ()
39          + i ()),
40       b (g () + h () + i ())    // It is ok to call the methods here.
41   {
42     b += g () + h () + i ();    // And here too.
43   }
44   virtual void f () {}
45   int b;
47 struct C : B, virtual A
49   C () : A (i ()) {}
52 int
53 main ()
55   C c;
58 // { dg-output "\[^\n\r]*pr70147-2.C:49:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'A'(\n|\r\n|\r)" }
59 // { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
60 // { dg-output "  ?.. .. .. ..  ?.. .. .. ..  ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
61 // { dg-output "              ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
62 // { dg-output "              ?invalid vptr\[^\n\r]*(\n|\r\n|\r)" }
63 // { dg-output "\[^\n\r]*pr70147-2.C:33:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'E'(\n|\r\n|\r)" }
64 // { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
65 // { dg-output "  ?.. .. .. ..  ?.. .. .. ..  ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
66 // { dg-output "              ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
67 // { dg-output "              ?invalid vptr(\n|\r\n|\r)" }
68 // { dg-output "\[^\n\r]*pr70147-2.C:34:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'F'(\n|\r\n|\r)" }
69 // { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
70 // { dg-output "  ?.. .. .. ..  ?.. .. .. ..  ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
71 // { dg-output "              ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
72 // { dg-output "              ?invalid vptr\[^\n\r]*(\n|\r\n|\r)" }
73 // { dg-output "\[^\n\r]*pr70147-2.C:38:\[0-9]*: runtime error: member call on address 0x\[0-9a-fA-F]* which does not point to an object of type 'F'(\n|\r\n|\r)" }
74 // { dg-output "0x\[0-9a-fA-F]*: note: object has invalid vptr(\n|\r\n|\r)" }
75 // { dg-output "  ?.. .. .. ..  ?.. .. .. ..  ?.. .. .. .. \[^\n\r]*(\n|\r\n|\r)" }
76 // { dg-output "              ?\\^~~~~~~~~~~\[^\n\r]*(\n|\r\n|\r)" }
77 // { dg-output "              ?invalid vptr" }