Implement opaque-enum-specifiers for C++0x.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Oct 2010 04:56:45 +0000 (04:56 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 26 Oct 2010 04:56:45 +0000 (04:56 +0000)
commitaa29061672dcd7886775822f89882bd86fde0750
tree1bab3384ca044b2ac3dc7a0b9b2dbbbc8399e741
parentf30fa59a7310a474111759ce7dffca32844dc2d7
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165935 138bc75d-0d04-0410-961f-82ee72b054a4
23 files changed:
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/auto9.C
gcc/testsuite/g++.dg/cpp0x/forw_enum1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum8.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/forw_enum9.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/scoped_enum.C
gcc/testsuite/g++.dg/parse/enum3.C
gcc/testsuite/g++.dg/template/crash79.C
gcc/testsuite/g++.old-deja/g++.jason/cond.C
gcc/tree.h