annotate gcc/testsuite/g++.dg/cpp1y/pr66443-cxx14.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do run { target c++14 } }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 // pr c++/66443 a synthesized ctor of an abstract class that's deleted
kono
parents:
diff changeset
4 // only because of virtual base construction doesn't stop a derived
kono
parents:
diff changeset
5 // class using it as a base object constructor (provided it has a
kono
parents:
diff changeset
6 // suitable ctor invocation of the virtual base).
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 static int a_made;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 struct A {
kono
parents:
diff changeset
11 A *m_a = this;
kono
parents:
diff changeset
12 A (int) { a_made++; }
kono
parents:
diff changeset
13 };
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 struct B : virtual A {
kono
parents:
diff changeset
16 A *m_b = this;
kono
parents:
diff changeset
17 virtual bool Ok () = 0; // abstract
kono
parents:
diff changeset
18 };
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 struct C : B {
kono
parents:
diff changeset
21 // C::m_c is placed where a complete B object would put A
kono
parents:
diff changeset
22 int m_c = 1729;
kono
parents:
diff changeset
23 public:
kono
parents:
diff changeset
24 C();
kono
parents:
diff changeset
25 virtual bool Ok ();
kono
parents:
diff changeset
26 };
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 bool C::Ok ()
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 // check everyone agreed on where A is
kono
parents:
diff changeset
31 return a_made == 1 && m_a == this && m_b == this && m_c == 1729;
kono
parents:
diff changeset
32 }
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 C::C ()
kono
parents:
diff changeset
35 : A (1) // Explicit call of A's ctor
kono
parents:
diff changeset
36 { }
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 bool Ok (C &c)
kono
parents:
diff changeset
39 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 return true;
111
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 int main ()
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 C c;
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 return !c.Ok ();
kono
parents:
diff changeset
48 }