Skip to content

Commit 0ce1ab5

Browse files
committed
enabling virtual function wrappers for every virtual call model
1 parent 2fec629 commit 0ce1ab5

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

gcc/cp/contracts.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3454,7 +3454,7 @@ should_contract_wrap_call (bool do_pre, bool do_post, bool is_virt)
34543454
client-side checking is enabled for all contracts. */
34553455
if ((is_virt
34563456
&& (flag_contract_nonattr_inheritance_mode
3457-
== CONTRACT_INHERITANCE_P2900R13))
3457+
!= CONTRACT_INHERITANCE_NONE))
34583458
|| (flag_contract_nonattr_client_check > 1))
34593459
return true;
34603460

gcc/testsuite/g++.dg/contracts/cpp26/P3653-virtual-func/virtual_base.C

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,20 @@ int main(int, char**)
101101
clear_checks ();
102102
fooBase (&b0);
103103
assert (a.checked > 0);
104+
assert (b.checked == 0);
105+
assert (c.checked == 0);
104106

105107
clear_checks ();
106108
fooBase (&c0);
107109
assert (a.checked > 0);
110+
assert (b.checked == 0);
111+
assert (c.checked == 0);
108112

109113
clear_checks ();
110114
fooBase (&c1);
111-
assert (a.checked == 0);
115+
assert (a.checked > 0);
112116
assert (b.checked > 0);
117+
assert (c.checked == 0);
113118

114119
clear_checks ();
115120
fooBase (&g0);
@@ -119,7 +124,7 @@ int main(int, char**)
119124

120125
clear_checks ();
121126
fooBase (&g1);
122-
assert (a.checked == 0);
127+
assert (a.checked > 0);
123128
assert (b.checked == 0);
124129
assert (c.checked > 0);
125130

@@ -131,26 +136,30 @@ int main(int, char**)
131136

132137
clear_checks ();
133138
fooBase (&g3);
134-
assert (a.checked == 0);
139+
assert (a.checked > 0);
135140
assert (b.checked > 0);
136141
assert (c.checked > 0);
137142

138143
clear_checks ();
139144
b0.f ();
140145
assert (a.checked > 0);
146+
assert (b.checked == 0);
147+
assert (c.checked == 0);
141148

142149
clear_checks ();
143150
c0.f ();
144151
assert (a.checked > 0);
152+
assert (b.checked == 0);
153+
assert (c.checked == 0);
145154

146155
clear_checks ();
147156
c1.f ();
148157
assert (a.checked == 0);
149158
assert (b.checked > 0);
159+
assert (c.checked == 0);
150160

151161
clear_checks ();
152162
g0.f ();
153-
;
154163
assert (a.checked > 0);
155164
assert (b.checked == 0);
156165
assert (c.checked == 0);

gcc/testsuite/g++.dg/contracts/cpp26/P3653-virtual-func/virtual_func.C

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,20 @@ main (int, char**)
8888
clear_checks ();
8989
fooBase (&b0);
9090
assert (a.checked > 0);
91+
assert (b.checked == 0);
92+
assert (c.checked == 0);
9193

9294
clear_checks ();
9395
fooBase (&c0);
9496
assert (a.checked > 0);
97+
assert (b.checked == 0);
98+
assert (c.checked == 0);
9599

96100
clear_checks ();
97101
fooBase (&c1);
98-
assert (a.checked == 0);
102+
assert (a.checked > 0);
99103
assert (b.checked > 0);
104+
assert (c.checked == 0);
100105

101106
clear_checks ();
102107
fooBase (&g0);
@@ -106,32 +111,36 @@ main (int, char**)
106111

107112
clear_checks ();
108113
fooBase (&g1);
109-
assert (a.checked == 0);
114+
assert (a.checked > 0);
110115
assert (b.checked == 0);
111116
assert (c.checked > 0);
112117

113118
clear_checks ();
114119
fooBase (&g2);
115-
assert (a.checked == 0);
120+
assert (a.checked > 0);
116121
assert (b.checked > 0);
117122
assert (c.checked == 0);
118123

119124
clear_checks ();
120125
b0.f ();
121126
assert (a.checked > 0);
127+
assert (b.checked == 0);
128+
assert (c.checked == 0);
122129

123130
clear_checks ();
124131
c0.f ();
125132
assert (a.checked > 0);
133+
assert (b.checked == 0);
134+
assert (c.checked == 0);
126135

127136
clear_checks ();
128137
c1.f ();
129138
assert (a.checked == 0);
130139
assert (b.checked > 0);
140+
assert (c.checked == 0);
131141

132142
clear_checks ();
133143
g0.f ();
134-
;
135144
assert (a.checked > 0);
136145
assert (b.checked == 0);
137146
assert (c.checked == 0);

0 commit comments

Comments
 (0)