Skip to content

Commit 4c19686

Browse files
Merge pull request gcc-mirror#95 from NinaRanns/contracts_inheritance_ville_part2
fixing caller side checks
2 parents 2fec629 + d7339c8 commit 4c19686

29 files changed

+63
-45
lines changed

gcc/c-family/c.opt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,9 +1980,9 @@ Enum(contract_inheritance) String(P2900R13) Value(1)
19801980
EnumValue
19811981
Enum(contract_inheritance) String(P3653) Value(2)
19821982

1983-
fcontracts-nonattr-inheritance-mode=
1984-
C++ Joined RejectNegative Enum(contract_inheritance) Var(flag_contract_nonattr_inheritance_mode) Init(0)
1985-
-fcontracts-nonattr-inheritance-mode=[none|P2900R13|P3653] Select how contracts are inherited for virtual functions
1983+
fcontracts-on-virtual-functions=
1984+
C++ Joined RejectNegative Enum(contract_inheritance) Var(flag_contracts_on_virtual_functions) Init(0)
1985+
-fcontracts-on-virtual-functions=[none|P2900R13|P3653] Select how contracts are inherited for virtual functions
19861986

19871987
Wsuggest-explicit-contract
19881988
C++ ObjC++ Var(suggest_explicit_contract) Warning

gcc/cp/class.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3228,8 +3228,8 @@ check_for_override (tree decl, tree ctype)
32283228

32293229
if (DECL_HAS_CONTRACTS_P(decl)
32303230
&& flag_contracts_nonattr
3231-
&& flag_contract_nonattr_inheritance_mode
3232-
== CONTRACT_INHERITANCE_NONE)
3231+
&& flag_contracts_on_virtual_functions
3232+
== CONTRACTS_ON_VIRTUALS_NONE)
32333233
{
32343234
error_at (DECL_SOURCE_LOCATION(decl),
32353235
"Contracts can not be added to virtual functions.");

gcc/cp/contracts.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,8 +3453,8 @@ should_contract_wrap_call (bool do_pre, bool do_post, bool is_virt)
34533453
/* We always wrap virtual function calls, and non-virtual calls when
34543454
client-side checking is enabled for all contracts. */
34553455
if ((is_virt
3456-
&& (flag_contract_nonattr_inheritance_mode
3457-
== CONTRACT_INHERITANCE_P2900R13))
3456+
&& (flag_contracts_on_virtual_functions
3457+
!= CONTRACTS_ON_VIRTUALS_NONE))
34583458
|| (flag_contract_nonattr_client_check > 1))
34593459
return true;
34603460

@@ -3533,8 +3533,8 @@ define_contract_wrapper_func (const tree& fndecl, const tree& wrapdecl, void*)
35333533
bool check_post
35343534
= (flag_contract_nonattr_client_check > 1)
35353535
|| (is_virtual
3536-
&& (flag_contract_nonattr_inheritance_mode
3537-
== CONTRACT_INHERITANCE_P2900R13));
3536+
&& (flag_contracts_on_virtual_functions
3537+
== CONTRACTS_ON_VIRTUALS_P2900R13));
35383538
/* For wrappers on CDTORs we need to refer to the original contracts,
35393539
when the wrapper is around a clone. */
35403540
set_decl_contracts( wrapdecl,

gcc/cp/contracts.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ enum contract_semantic
5959

6060
enum contract_inheritance
6161
{
62-
CONTRACT_INHERITANCE_NONE = 0,
63-
CONTRACT_INHERITANCE_P2900R13 = 1,
64-
CONTRACT_INHERITANCE_P3653 = 2,
62+
CONTRACTS_ON_VIRTUALS_NONE = 0,
63+
CONTRACTS_ON_VIRTUALS_P2900R13 = 1,
64+
CONTRACTS_ON_VIRTUALS_P3653 = 2,
6565
};
6666

6767
/* True if the contract is unchecked. */

gcc/cp/search.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2230,7 +2230,7 @@ check_override_contracts (tree fndecl)
22302230
{
22312231

22322232
if (!flag_contracts || !flag_contracts_nonattr
2233-
|| flag_contract_nonattr_inheritance_mode != CONTRACT_INHERITANCE_P3653)
2233+
|| flag_contracts_on_virtual_functions != CONTRACTS_ON_VIRTUALS_P3653)
22342234
return;
22352235

22362236
/* A constructor for a class T does not override a function T

gcc/testsuite/g++.dg/contracts/cpp26/P2900R13-virtual-func/contract_specifier_seq.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// behaves as if the function exited via an exception.
33
// This tests the behaviour of a pre condition on a destructor
44
// { dg-do run }
5-
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontract-evaluation-semantic=observe -fcontracts-nonattr-inheritance-mode=P2900R13" }
5+
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontract-evaluation-semantic=observe -fcontracts-on-virtual-functions=P2900R13" }
66

77
#include <experimental/contract>
88
#include <exception>

gcc/testsuite/g++.dg/contracts/cpp26/P2900R13-virtual-func/contracts-multiple-inheritance2.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// { dg-do compile }
2-
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on -fcontracts-nonattr -fcontracts-nonattr-inheritance-mode=P2900R13" }
2+
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on -fcontracts-nonattr -fcontracts-on-virtual-functions=P2900R13" }
33

44
struct BaseA {
55
virtual int fun(int n) pre ( n > 0 ) { return -n; }

gcc/testsuite/g++.dg/contracts/cpp26/P2900R13-virtual-func/contracts-pre4.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// test that contracts on overriding functions are found correctly
22
// { dg-do run }
3-
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on -fcontracts-nonattr -fcontracts-nonattr-inheritance-mode=P2900R13" }
3+
// { dg-options "-std=c++2a -fcontracts -fcontract-continuation-mode=on -fcontracts-nonattr -fcontracts-on-virtual-functions=P2900R13" }
44

55
struct Base
66
{

gcc/testsuite/g++.dg/contracts/cpp26/P2900R13-virtual-func/contracts-redecl.C

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// generic error tests for generalized contract redecls
22
// { dg-do compile }
3-
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontracts-nonattr-inheritance-mode=P2900R13" }
3+
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontracts-on-virtual-functions=P2900R13" }
44

55

66
struct Base

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// { dg-do run }
2-
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontracts-nonattr-inheritance-mode=P2900R13" }
2+
// { dg-options "-std=c++2a -fcontracts -fcontracts-nonattr -fcontracts-on-virtual-functions=P2900R13" }
33

44
bool y_f4_called = false;
55
bool y2_f4_called = false;

0 commit comments

Comments
 (0)