re PR c++/51786 ([c++0x] Invalid declaration with decltype accepted)
/cp 2013-07-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51786 * parser.c (cp_parser_simple_declaration): Before calling shadow_tag also check declares_class_or_enum. /testsuite 2013-07-09 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51786 * g++.dg/cpp0x/pr51786.C: New. From-SVN: r200813
This commit is contained in:
parent
3830d98a8b
commit
22adf7b528
@ -1,3 +1,9 @@
|
||||
2013-07-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51786
|
||||
* parser.c (cp_parser_simple_declaration): Before calling shadow_tag
|
||||
also check declares_class_or_enum.
|
||||
|
||||
2013-07-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/57550
|
||||
|
@ -11009,11 +11009,20 @@ cp_parser_simple_declaration (cp_parser* parser,
|
||||
|
||||
/* Issue an error message if no declarators are present, and the
|
||||
decl-specifier-seq does not itself declare a class or
|
||||
enumeration. */
|
||||
enumeration: [dcl.dcl]/3. */
|
||||
if (!saw_declarator)
|
||||
{
|
||||
if (cp_parser_declares_only_class_p (parser))
|
||||
shadow_tag (&decl_specifiers);
|
||||
{
|
||||
if (!declares_class_or_enum
|
||||
&& decl_specifiers.type
|
||||
&& OVERLOAD_TYPE_P (decl_specifiers.type))
|
||||
/* Ensure an error is issued anyway when finish_decltype_type,
|
||||
called via cp_parser_decl_specifier_seq, returns a class or
|
||||
an enumeration (c++/51786). */
|
||||
decl_specifiers.type = NULL_TREE;
|
||||
shadow_tag (&decl_specifiers);
|
||||
}
|
||||
/* Perform any deferred access checks. */
|
||||
perform_deferred_access_checks (tf_warning_or_error);
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-07-09 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51786
|
||||
* g++.dg/cpp0x/pr51786.C: New.
|
||||
|
||||
2013-07-08 Janis Johnson <janisjo@codesourcery.com>
|
||||
|
||||
* gcc.target/powerpc/tfmode_off.c: Skip for EABI targets.
|
||||
|
8
gcc/testsuite/g++.dg/cpp0x/pr51786.C
Normal file
8
gcc/testsuite/g++.dg/cpp0x/pr51786.C
Normal file
@ -0,0 +1,8 @@
|
||||
// PR c++/51786
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
enum E {};
|
||||
struct A {};
|
||||
|
||||
void foo() { decltype(E{}); } // { dg-error "does not declare anything" }
|
||||
void bar() { decltype(A{}); } // { dg-error "does not declare anything" }
|
Loading…
Reference in New Issue
Block a user