diff options
author | Chris Lattner <sabre@nondot.org> | 2010-11-09 20:14:26 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-11-09 20:14:26 +0000 |
commit | 0786544ac53f12544a545bdcd56bcad09313f2e6 (patch) | |
tree | ebefb6a5f468d19ccdf5585eeee51e3d9ae5e73b | |
parent | 35814e61287ba7539a731fab019b8ac299accba4 (diff) | |
download | bcm5719-llvm-0786544ac53f12544a545bdcd56bcad09313f2e6.tar.gz bcm5719-llvm-0786544ac53f12544a545bdcd56bcad09313f2e6.zip |
fix PR8380, a crash on invalid due to an illogical DeclSpec SourceRange being constructed.
llvm-svn: 118625
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 1 | ||||
-rw-r--r-- | clang/test/Parser/cxx-decl.cpp | 11 |
3 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 9e430a42968..7e01bacf5cf 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -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; diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 083d6ab798b..c5906aa19a8 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -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) diff --git a/clang/test/Parser/cxx-decl.cpp b/clang/test/Parser/cxx-decl.cpp index e00ffd070fd..6b355e814a8 100644 --- a/clang/test/Parser/cxx-decl.cpp +++ b/clang/test/Parser/cxx-decl.cpp @@ -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; + + |