]> granicus.if.org Git - clang/commitdiff
The callers of ParseStructDeclaration are not expecting it to
authorChris Lattner <sabre@nondot.org>
Mon, 29 Oct 2007 04:42:53 +0000 (04:42 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 29 Oct 2007 04:42:53 +0000 (04:42 +0000)
eat the terminating ;.  Fix one place where it did, allowing this
to compile without error:

struct x {
 int a;
 union {
  int b;
  float c;
 };

 int d;
};

This reduces diagnostics on PR1750 from 33 to 27.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43437 91177308-0d34-0410-b5e6-96231b3b80d8

Parse/ParseDecl.cpp

index 80ff5757e0c6250df9a57d71826a2d7d49624c84..a525792ff80de079510ff7f81f5bc981420490c2 100644 (file)
@@ -630,11 +630,13 @@ void Parser::ParseStructUnionSpecifier(DeclSpec &DS) {
     Diag(StartLoc, diag::err_invalid_decl_spec_combination, PrevSpec);
 }
 
-/// ParseStructDeclaration
+/// ParseStructDeclaration - Parse a struct declaration without the terminating
+/// semicolon.
+///
 ///       struct-declaration:
-///         specifier-qualifier-list struct-declarator-list ';'
+///         specifier-qualifier-list struct-declarator-list
 /// [GNU]   __extension__ struct-declaration
-/// [GNU]   specifier-qualifier-list ';'
+/// [GNU]   specifier-qualifier-list
 ///       struct-declarator-list:
 ///         struct-declarator
 ///         struct-declarator-list ',' struct-declarator
@@ -661,7 +663,6 @@ void Parser::ParseStructDeclaration(DeclTy *TagDecl,
   // If there are no declarators, issue a warning.
   if (Tok.is(tok::semi)) {
     Diag(SpecQualLoc, diag::w_no_declarators);
-    ConsumeToken();
     return;
   }
 
@@ -697,7 +698,7 @@ void Parser::ParseStructDeclaration(DeclTy *TagDecl,
     // If we don't have a comma, it is either the end of the list (a ';')
     // or an error, bail out.
     if (Tok.isNot(tok::comma))
-      break;
+      return;
     
     // Consume the comma.
     ConsumeToken();
@@ -709,7 +710,6 @@ void Parser::ParseStructDeclaration(DeclTy *TagDecl,
     if (Tok.is(tok::kw___attribute))
       DeclaratorInfo.AddAttributes(ParseAttributes());
   }
-  return;
 }
 
 /// ParseStructUnionBody