mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
c++, contracts: Add a contract scope per basic.scope.contract.
This adds a scope for contract assertions as per the standard section referenced. Split out here because it is the only part of the implementation that touches the name lookup files. gcc/cp/ChangeLog: * cp-tree.h (processing_contract_condition): New. * name-lookup.cc (cp_binding_level_descriptor): Add contract scope. (begin_scope): Likewise. * name-lookup.h (enum scope_kind): Add sk_contract. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
This commit is contained in:
@@ -2154,6 +2154,13 @@ extern GTY(()) struct saved_scope *scope_chain;
|
||||
#define processing_explicit_instantiation scope_chain->x_processing_explicit_instantiation
|
||||
#define processing_omp_trait_property_expr scope_chain->x_processing_omp_trait_property_expr
|
||||
|
||||
/* Nonzero if we are parsing the expression of a contract condition. These
|
||||
expressions appear outside the parameter list (like a trailing return
|
||||
type), but are potentially evaluated. */
|
||||
|
||||
#define processing_contract_condition \
|
||||
(scope_chain->bindings->kind == sk_contract)
|
||||
|
||||
#define in_discarded_stmt scope_chain->discarded_stmt
|
||||
#define in_consteval_if_p scope_chain->consteval_if_p
|
||||
#define in_expansion_stmt scope_chain->expansion_stmt
|
||||
|
||||
@@ -4747,7 +4747,8 @@ cp_binding_level_descriptor (cp_binding_level *scope)
|
||||
"template-explicit-spec-scope",
|
||||
"transaction-scope",
|
||||
"openmp-scope",
|
||||
"lambda-scope"
|
||||
"lambda-scope",
|
||||
"contract-check-scope"
|
||||
};
|
||||
static_assert (ARRAY_SIZE (scope_kind_names) == sk_count,
|
||||
"must keep names aligned with scope_kind enum");
|
||||
@@ -4838,6 +4839,7 @@ begin_scope (scope_kind kind, tree entity)
|
||||
case sk_scoped_enum:
|
||||
case sk_transaction:
|
||||
case sk_omp:
|
||||
case sk_contract:
|
||||
case sk_stmt_expr:
|
||||
case sk_lambda:
|
||||
scope->keep = keep_next_level_flag;
|
||||
|
||||
@@ -229,6 +229,8 @@ enum scope_kind {
|
||||
sk_transaction, /* A synchronized or atomic statement. */
|
||||
sk_omp, /* An OpenMP structured block. */
|
||||
sk_lambda, /* A lambda scope. */
|
||||
sk_contract, /* A C++26 contract-assertion scope.
|
||||
[basic.scope.contract] */
|
||||
sk_count /* Number of scope_kind enumerations. */
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user