]> granicus.if.org Git - clang/commitdiff
fix PR8380, a crash on invalid due to an illogical DeclSpec SourceRange being constru...
authorChris Lattner <sabre@nondot.org>
Tue, 9 Nov 2010 20:14:26 +0000 (20:14 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 9 Nov 2010 20:14:26 +0000 (20:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118625 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseDecl.cpp
lib/Parse/ParseDeclCXX.cpp
test/Parser/cxx-decl.cpp

index 9e430a42968f4a15b54942787634f0071d5a767f..7e01bacf5cf2f567fc329116006fe1f4620e6285 100644 (file)
@@ -889,6 +889,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
                                         AccessSpecifier AS,
                                         DeclSpecContext DSContext) {  
   DS.SetRangeStart(Tok.getLocation());
+  DS.SetRangeEnd(Tok.getLocation());
   while (1) {
     bool isInvalid = false;
     const char *PrevSpec = 0;
index 083d6ab798b86229eff4f5f19000ff44e677578c..c5906aa19a88840f05ad321a7615cbae30187d10 100644 (file)
@@ -187,7 +187,6 @@ Decl *Parser::ParseLinkage(ParsingDeclSpec &DS,
                                        unsigned Context) {
   assert(Tok.is(tok::string_literal) && "Not a string literal!");
   llvm::SmallString<8> LangBuffer;
-  // LangBuffer is guaranteed to be big enough.
   bool Invalid = false;
   llvm::StringRef Lang = PP.getSpelling(Tok, LangBuffer, &Invalid);
   if (Invalid)
index e00ffd070fd888aea0fd9924dc6d107d86d5f758..6b355e814a8099605c4c2c80986efa57611018d5 100644 (file)
@@ -83,3 +83,14 @@ struct CodeCompleteConsumer {
 
 void CodeCompleteConsumer::() { // expected-error {{xpected unqualified-id}}
 } 
+
+;
+
+// PR8380
+extern ""      // expected-error {{unknown linkage language}}
+test6a { ;// expected-error {{C++ requires a type specifier for all declarations}} \
+     // expected-error {{expected ';' after top level declarator}}
+  
+  int test6b;
+  
+