2
2
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=off -fcontracts-nonattr -fcontracts-nonattr-inheritance-mode=P3653 " }
3
3
#include <cassert>
4
4
5
- struct contract {
5
+ struct contract
6
+ {
6
7
int checked = 0 ;
7
8
};
8
9
10
+ contract a , b , c ;
9
11
10
- contract a , b , c ;
11
-
12
- bool checkA () {
13
- a .checked ++ ;
14
- return true;
12
+ bool
13
+ checkA ()
14
+ {
15
+ a .checked ++ ;
16
+ return true;
15
17
}
16
18
17
- bool checkB (){
18
- b .checked ++ ;
19
- return true;
19
+ bool
20
+ checkB ()
21
+ {
22
+ b .checked ++ ;
23
+ return true;
20
24
}
21
25
22
- bool checkC (){
23
- c .checked ++ ;
24
- return true;
26
+ bool
27
+ checkC ()
28
+ {
29
+ c .checked ++ ;
30
+ return true;
25
31
}
26
32
27
- void clear_checks (){
33
+ void
34
+ clear_checks ()
35
+ {
28
36
a .checked = b .checked = c .checked = 0 ;
29
37
30
38
}
31
39
32
40
struct Base
33
41
{
34
- virtual void f () pre (checkA ()){};
42
+ virtual void f () pre (checkA ()){};
35
43
};
36
44
37
45
@@ -42,12 +50,12 @@ struct Child0 : virtual Base
42
50
43
51
struct Child1 : virtual Base
44
52
{
45
- virtual void f () pre (checkB ()){};
53
+ virtual void f () pre (checkB ()){};
46
54
};
47
55
48
56
struct Child2 : virtual Base
49
57
{
50
- virtual void f () pre (checkC ()){};
58
+ virtual void f () pre (checkC ()){};
51
59
};
52
60
53
61
@@ -59,7 +67,7 @@ struct GChild0 : Child0
59
67
60
68
struct GChild1 : Child0 , Child1
61
69
{
62
- virtual void f () pre (checkC ()){};
70
+ virtual void f () pre (checkC ()){};
63
71
};
64
72
65
73
struct GChild2 : Child0 , Child1
@@ -90,84 +98,80 @@ int main(int, char**)
90
98
GChild2 g2 ;
91
99
GChild3 g3 ;
92
100
93
- clear_checks ();
94
- fooBase (& b0 );
95
- assert (a .checked > 0 );
96
-
97
- clear_checks ();
98
- fooBase (& c0 );
99
- assert (a .checked > 0 );
100
-
101
- clear_checks ();
102
- fooBase (& c1 );
103
- assert (a .checked == 0 );
104
- assert (b .checked > 0 );
105
-
106
- clear_checks ();
107
- fooBase (& g0 );
108
- assert (a .checked > 0 );
109
- assert (b .checked == 0 );
110
- assert (c .checked == 0 );
111
-
112
- clear_checks ();
113
- fooBase (& g1 );
114
- assert (a .checked == 0 );
115
- assert (b .checked == 0 );
116
- assert (c .checked > 0 );
117
-
118
-
119
- clear_checks ();
120
- fooBase (& g2 );
121
- assert (a .checked > 0 );
122
- assert (b .checked > 0 );
123
- assert (c .checked == 0 );
124
-
125
-
126
- clear_checks ();
127
- fooBase (& g3 );
128
- assert (a .checked == 0 );
129
- assert (b .checked > 0 );
130
- assert (c .checked > 0 );
131
-
132
- clear_checks ();
133
- b0 .f ();
134
- assert (a .checked > 0 );
135
-
136
- clear_checks ();
137
- c0 .f ();
138
- assert (a .checked > 0 );
139
-
140
- clear_checks ();
141
- c1 .f ();
142
- assert (a .checked == 0 );
143
- assert (b .checked > 0 );
144
-
145
- clear_checks ();
146
- g0 .f ();;
147
- assert (a .checked > 0 );
148
- assert (b .checked == 0 );
149
- assert (c .checked == 0 );
150
-
151
-
152
- clear_checks ();
153
- g1 .f ();
154
- assert (a .checked == 0 );
155
- assert (b .checked == 0 );
156
- assert (c .checked > 0 );
157
-
158
-
159
- clear_checks ();
160
- g2 .f ();
161
- assert (a .checked > 0 );
162
- assert (b .checked > 0 );
163
- assert (c .checked == 0 );
164
-
165
- clear_checks ();
166
- g3 .f ();
167
- assert (a .checked == 0 );
168
- assert (b .checked > 0 );
169
- assert (c .checked > 0 );
170
-
101
+ clear_checks ();
102
+ fooBase (& b0 );
103
+ assert (a .checked > 0 );
104
+
105
+ clear_checks ();
106
+ fooBase (& c0 );
107
+ assert (a .checked > 0 );
108
+
109
+ clear_checks ();
110
+ fooBase (& c1 );
111
+ assert (a .checked == 0 );
112
+ assert (b .checked > 0 );
113
+
114
+ clear_checks ();
115
+ fooBase (& g0 );
116
+ assert (a .checked > 0 );
117
+ assert (b .checked == 0 );
118
+ assert (c .checked == 0 );
119
+
120
+ clear_checks ();
121
+ fooBase (& g1 );
122
+ assert (a .checked == 0 );
123
+ assert (b .checked == 0 );
124
+ assert (c .checked > 0 );
125
+
126
+ clear_checks ();
127
+ fooBase (& g2 );
128
+ assert (a .checked > 0 );
129
+ assert (b .checked > 0 );
130
+ assert (c .checked == 0 );
131
+
132
+ clear_checks ();
133
+ fooBase (& g3 );
134
+ assert (a .checked == 0 );
135
+ assert (b .checked > 0 );
136
+ assert (c .checked > 0 );
137
+
138
+ clear_checks ();
139
+ b0 .f ();
140
+ assert (a .checked > 0 );
141
+
142
+ clear_checks ();
143
+ c0 .f ();
144
+ assert (a .checked > 0 );
145
+
146
+ clear_checks ();
147
+ c1 .f ();
148
+ assert (a .checked == 0 );
149
+ assert (b .checked > 0 );
150
+
151
+ clear_checks ();
152
+ g0 .f ();
153
+ ;
154
+ assert (a .checked > 0 );
155
+ assert (b .checked == 0 );
156
+ assert (c .checked == 0 );
157
+
158
+ clear_checks ();
159
+ g1 .f ();
160
+ assert (a .checked == 0 );
161
+ assert (b .checked == 0 );
162
+ assert (c .checked > 0 );
163
+
164
+ clear_checks ();
165
+ g2 .f ();
166
+ assert (a .checked > 0 );
167
+ assert (b .checked > 0 );
168
+ assert (c .checked == 0 );
169
+
170
+ clear_checks ();
171
+ g3 .f ();
172
+ assert (a .checked == 0 );
173
+ assert (b .checked > 0 );
174
+ assert (c .checked > 0 );
171
175
172
176
return 0 ;
173
177
}
0 commit comments