From 90ecaf87ff7b69272f0d5a1dd8cbe3a4ec7a9fd8 Mon Sep 17 00:00:00 2001 From: Rodrigo Rivas Costa Date: Tue, 26 Oct 2010 04:56:45 +0000 Subject: Implement opaque-enum-specifiers for C++0x. gcc/ * tree.h (ENUM_IS_OPAQUE): New. * dwarf2out.c (gen_enumeration_type_die): Use ENUM_IS_OPAQUE. gcc/cp/ * cp-tree.h (SET_OPAQUE_ENUM_P): New. (OPAQUE_ENUM_P): New. (ENUM_FIXED_UNDERLYING_TYPE_P): New. (start_enum): Update prototype. (finish_enum_value_list): New prototype. * parser.c (cp_parser_elaborated_type_specifier): Issue a pedwarn if "enum class" is used in an elaborated-type-specifier. (cp_parser_enum_specifier): Rewrite to parse opaque-enum-specifiers. * decl.c (copy_type_enum): New. (finish_enum_value_list): New, with code from finish_enum. (finish_enum): A lot of code removed. Added a gcc_assert. (start_enum): Add parameters enumtype and is_new. Rewrite to work with opaque-enum-specifiers. * pt.c (maybe_process_partial_specialization): Allow for template specialization of enumerations, with a pedwarn. (lookup_template_class): Update call to start_enum. Call to SET_OPAQUE_ENUM_P. (tsubst_enum): Call to begin_scope, finish_scope and finish_enum_value_list. From-SVN: r165935 --- gcc/tree.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/tree.h') diff --git a/gcc/tree.h b/gcc/tree.h index 3877ae5..968a1bc 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1166,6 +1166,9 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, /* Used to mark scoped enums. */ #define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag) +/* Determines whether an ENUMERAL_TYPE has defined the list of constants. */ +#define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag) + /* In an expr node (usually a conversion) this means the node was made implicitly and should not lead to any sort of warning. In a decl node, warnings concerning the decl should be suppressed. This is used at -- cgit v1.1