Fortran: Fix PR 47485.
[gcc.git] / gcc / testsuite / g++.dg / warn / Warray-bounds-21.C
blob57bb98bf63f0a3958a3911b10392f92bc115a9f7
1 /* PR middle-end/98266 - bogus array subscript is partly outside array
2    bounds on virtual inheritance
3    Same as Warray-bounds-19.C with nonvirtual inheritance.
4    { dg-do compile }
5    { dg-options "-O2 -Wall" } */
7 void* operator new (__SIZE_TYPE__, void *p) { return p; }
8 void* operator new[] (__SIZE_TYPE__, void *p) { return p; }
11 struct A
13   virtual ~A ();
14   int ai;
17 struct B: A { };
20 // Exercise access to base members by ctor of the most derived class.
22 struct C1: A
24   int c1i;
25   C1 ();
28 struct D1: B, C1
30   D1 () { B::ai = 0; C1::ai = 1; c1i = 2; };
33 void sink (void*);
35 void nowarn_derived_ctor_access_decl ()
37   D1 d1;
38   sink (&d1);
41 void nowarn_derived_ctor_access_new ()
43   D1 *p = new D1;
44   sink (p);
47 void nowarn_derived_ctor_access_placement_new ()
49   char a[sizeof (D1)];
50   D1 *p = new (a) D1;
51   sink (p);
54 void nowarn_derived_ctor_access_new_array ()
56   D1 *p = new D1[2];
57   sink (p);
60 void nowarn_derived_ctor_access_placement_new_array ()
62   char a[sizeof (D1) * 2];
63   D1 *p = new (a) D1[2];
64   sink (p);
68 // Exercise access to base members by ctor of the second most derived class.
70 struct C2: A
72   int c2i;
73   ~C2 () { ai = 0; c2i = 1; }
76 struct D2: B, C2
78   D2 ();
81 void nowarn_base_dtor_access_decl ()
83   D2 d2;
84   sink (&d2);
87 void nowarn_base_dtor_access_new ()
89   D2 *p = new D2;
90   sink (p);
93 void nowarn_base_dtor_access_placement_new ()
95   char a[sizeof (D2)];
96   D2 *p = new (a) D2;
97   sink (p);
100 void nowarn_base_dtor_access_new_array ()
102   D2 *p = new D2[2];
103   sink (p);
106 void nowarn_base_dtor_access_placement_new_array ()
108   char a[sizeof (D2) * 2];
109   D2 *p = new (a) D2[2];
110   sink (p);