[cfe-commits] r66305 - in /cfe/trunk: include/clang/Basic/DiagnosticParseKinds.def lib/Parse/ParseDecl.cpp test/Parser/cxx-using-directive.cpp test/Sema/anonymous-struct-union.c

Douglas Gregor dgregor at apple.com
Fri Mar 6 15:28:18 PST 2009


Author: dgregor
Date: Fri Mar  6 17:28:18 2009
New Revision: 66305

URL: http://llvm.org/viewvc/llvm-project?rev=66305&view=rev
Log:
Clean up some error messages with anonymous structs/unions and member declaration parsing. Fixes PR3680

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticParseKinds.def
    cfe/trunk/lib/Parse/ParseDecl.cpp
    cfe/trunk/test/Parser/cxx-using-directive.cpp
    cfe/trunk/test/Sema/anonymous-struct-union.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.def?rev=66305&r1=66304&r2=66305&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.def Fri Mar  6 17:28:18 2009
@@ -112,6 +112,8 @@
      "expected ';' at end of declaration list")
 DIAG(ext_expected_semi_decl_list, EXTENSION,
      "expected ';' at end of declaration list")
+DIAG(err_expected_member_name_or_semi, ERROR,
+     "expected member name or ';' after declaration specifiers")
 DIAG(err_function_declared_typedef, ERROR,
      "function definition declared 'typedef'")
 DIAG(err_expected_fn_body, ERROR,

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=66305&r1=66304&r2=66305&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Fri Mar  6 17:28:18 2009
@@ -1868,7 +1868,10 @@
     // portion is empty), if an abstract-declarator is allowed.
     D.SetIdentifier(0, Tok.getLocation());
   } else {
-    if (getLang().CPlusPlus)
+    if (D.getContext() == Declarator::MemberContext)
+      Diag(Tok, diag::err_expected_member_name_or_semi)
+        << D.getDeclSpec().getSourceRange();
+    else if (getLang().CPlusPlus)
       Diag(Tok, diag::err_expected_unqualified_id);
     else
       Diag(Tok, diag::err_expected_ident_lparen);

Modified: cfe/trunk/test/Parser/cxx-using-directive.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx-using-directive.cpp?rev=66305&r1=66304&r2=66305&view=diff

==============================================================================
--- cfe/trunk/test/Parser/cxx-using-directive.cpp (original)
+++ cfe/trunk/test/Parser/cxx-using-directive.cpp Fri Mar  6 17:28:18 2009
@@ -13,7 +13,7 @@
   
   class C {
     
-    using namespace B ; // expected-error{{expected unqualified-id}}
+    using namespace B ; // expected-error{{expected member name or ';' after declaration specifiers}}
     //FIXME: this needs better error message
   };
   

Modified: cfe/trunk/test/Sema/anonymous-struct-union.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/anonymous-struct-union.c?rev=66305&r1=66304&r2=66305&view=diff

==============================================================================
--- cfe/trunk/test/Sema/anonymous-struct-union.c (original)
+++ cfe/trunk/test/Sema/anonymous-struct-union.c Fri Mar  6 17:28:18 2009
@@ -88,4 +88,11 @@
   };
 };
 
+// PR3680
 struct {}; // expected-error{{declaration does not declare anything}}
+
+struct s2 {
+  union {
+    int a;
+  }
+}; // expected-error{{expected member name or ';' after declaration specifiers}}





More information about the cfe-commits mailing list