c++: Fix ENABLE_SCOPE_CHECKING printing

The lists of scope kinds used by ENABLE_SCOPE_CHECKING don't seem to
have been updated in a long while, causing ICEs and confusing output.
This patch brings the list into line.

Additionally, the comment on 'explicit_spec_p' says that the flag is
only valid if kind is 'sk_template_parms', so we rewrite the condition
to be more obviously correct here.

gcc/cp/ChangeLog:

	* name-lookup.h (enum scope_kind): Add 'sk_count'.
	* name-lookup.cc (cp_binding_level_descriptor): Add missing
	scope kinds. Add assertion that the list is up to date. Fix
	handling of explicit_spec_p.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
This commit is contained in:
Nathaniel Shead 2024-01-16 20:56:46 +11:00
parent 7d39726975
commit fe1649eea7
2 changed files with 14 additions and 4 deletions

View file

@ -4464,14 +4464,23 @@ cp_binding_level_descriptor (cp_binding_level *scope)
"try-scope",
"catch-scope",
"for-scope",
"cond-init-scope",
"stmt-expr-scope",
"function-parameter-scope",
"class-scope",
"enum-scope",
"namespace-scope",
"template-parameter-scope",
"template-explicit-spec-scope"
"template-explicit-spec-scope",
"transaction-scope",
"openmp-scope"
};
const scope_kind kind = scope->explicit_spec_p
? sk_template_spec : scope->kind;
static_assert (ARRAY_SIZE (scope_kind_names) == sk_count,
"must keep names aligned with scope_kind enum");
scope_kind kind = scope->kind;
if (kind == sk_template_parms && scope->explicit_spec_p)
kind = sk_template_spec;
return scope_kind_names[kind];
}

View file

@ -213,7 +213,8 @@ enum scope_kind {
explicit specialization is introduced by
"template <>", this scope is always empty. */
sk_transaction, /* A synchronized or atomic statement. */
sk_omp /* An OpenMP structured block. */
sk_omp, /* An OpenMP structured block. */
sk_count /* Number of scope_kind enumerations. */
};
struct GTY(()) cp_class_binding {