diff options
author | Douglas Gregor <doug.gregor@gmail.com> | 2008-08-26 22:33:10 +0000 |
---|---|---|
committer | Doug Gregor <dgregor@gcc.gnu.org> | 2008-08-26 22:33:10 +0000 |
commit | adf2edec3cd9b9002b7096744b627e4ea3b0d9d4 (patch) | |
tree | 21bef2d4fb6823e27ad009498c7d32454463f706 /gcc/cp/name-lookup.c | |
parent | 54e22276286b0e646f91fc52920332a56219b6be (diff) | |
download | gcc-adf2edec3cd9b9002b7096744b627e4ea3b0d9d4.zip gcc-adf2edec3cd9b9002b7096744b627e4ea3b0d9d4.tar.gz gcc-adf2edec3cd9b9002b7096744b627e4ea3b0d9d4.tar.bz2 |
c-common.c (do_switch_warnings): Look through the CONST_DECLs in the enumerators of an ENUMERAL_TYPE.
2008-08-26 Douglas Gregor <doug.gregor@gmail.com>
* c-common.c (do_switch_warnings): Look through the CONST_DECLs in
the enumerators of an ENUMERAL_TYPE.
* dbxout.c (dbxout_type): Ditto.
2008-08-26 Douglas Gregor <doug.gregor@gmail.com>
* typeck.c (type_after_usual_arithmetic_conversions): Don't do the
usual arithmetic conversions on scoped enumeration types.
(common_type): Ditto.
(default_conversion): Don't perform integral promotions on scoped
enumeration types.
(build_array_ref): Scoped enumeration types can't be used as
subscripts.
* decl.c (start_enum): If building a C++0x scoped enumeration,
enter its scope. If provided with an underlying type, check that
underlying type and set up the enumeration type accordingly.
(finish_enum): Only compute an underlying type if the underlying
type isn't already fixed, and only convert the enumerator values
now if we've just computed the underlying type. Finish the scope
of C++0x scoped enumerations.
(build_enumerator): For enumerations with a fixed underlying type,
check the enumerator values when the enumerator is defined.
(lookup_enumerator): New.
* call.c (standard_conversion): Don't allow assignment from
integers to scoped enumeration types, even with -fpermissive.
Don't convert from scoped enumerations to bool or any arithmetic
types.
(build_conditional_expr): Don't per the usual arithmetic
conversions for scoped enumeration types.
(convert_like_real): Check complain to see if we should
produce warnings.
* error.c (class_key_or_enum_as_string): Print scoped enums.
* cp-tree.h (MAYBE_CLASS_TYPE_P): Check CLASS_TYPE_P, not
TYPE_LANG_FLAG_5.
(INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P): New.
(SCOPED_ENUM_P): New.
(UNSCOPED_ENUM_P): New.
(SET_SCOPED_ENUM_P): New.
(ENUM_UNDERLYING_TYPE): New.
* pt.c (lookup_template_class): Update the instantiation of enum
types to deal with C++0x scoped enumerations and underlying
types.
* name-lookup.c (begin_scope): Deal with scoped enumeration
scopes.
(lookup_qualified_name): Deal with lookup into enumeration types.
* name-lookup.h (enum scope_kind): Add sk_scoped_enum.
* parser.c (cp_parser_class_or_namespace_name): Rename to...
(cp_parser_qualifying_entity): ... this. Also, in C++0x mode,
parse a type-name that can be an enumeration type.
(cp_parser_nested_name_specifier_opt): Update with C++0x grammar.
(cp_parser_elaborated_type_specifier): Parse the
optional `struct' or `class' following enum (in C++0x).
(cp_parser_enum_specifier): Parse C++0x scoped enumerations and
enum-base clauses.
2008-08-26 Douglas Gregor <doug.gregor@gmail.com>
* g++.dg/cpp0x/scoped_enum_examples.C: New.
* g++.dg/cpp0x/scoped_enum.C: New.
* g++.dg/cpp0x/scoped_enum_98.C: New.
* g++.dg/cpp0x/enum_base_warn.C: New.
* g++.dg/cpp0x/enum_base.C: New.
From-SVN: r139611
Diffstat (limited to 'gcc/cp/name-lookup.c')
-rw-r--r-- | gcc/cp/name-lookup.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index c9a7e60..727258a 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1329,7 +1329,7 @@ push_binding_level (struct cp_binding_level *scope) /* Create a new KIND scope and make it the top of the active scopes stack. ENTITY is the scope of the associated C++ entity (namespace, class, - function); it is NULL otherwise. */ + function, C++0x enumeration); it is NULL otherwise. */ cxx_scope * begin_scope (scope_kind kind, tree entity) @@ -1364,6 +1364,7 @@ begin_scope (scope_kind kind, tree entity) case sk_catch: case sk_for: case sk_class: + case sk_scoped_enum: case sk_function_parms: case sk_omp: scope->keep = keep_next_level_flag; @@ -3853,6 +3854,8 @@ lookup_qualified_name (tree scope, tree name, bool is_type_p, bool complain) if (qualified_lookup_using_namespace (name, scope, &binding, flags)) t = binding.value; } + else if (cxx_dialect != cxx98 && TREE_CODE (scope) == ENUMERAL_TYPE) + t = lookup_enumerator (scope, name); else if (is_class_type (scope, complain)) t = lookup_member (scope, name, 2, is_type_p); |