diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-02-07 08:38:28 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-02-07 08:38:28 +0000 |
| commit | b65a913c35de73c154cf7bd935e3df31c480614b (patch) | |
| tree | 88ac6c03227829ad7c6e5c91f7190998ae4df873 | |
| parent | e83b3aca0bebc2f68bff5c9a02aa78e77f8b1c06 (diff) | |
| download | bcm5719-llvm-b65a913c35de73c154cf7bd935e3df31c480614b.tar.gz bcm5719-llvm-b65a913c35de73c154cf7bd935e3df31c480614b.zip | |
Fix assertion failure when parsing linkage specifications (PR5921),
from Keir Mierle!
llvm-svn: 95516
| -rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Parse/Parser.cpp | 1 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/extern-c.cpp | 3 |
3 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index c24bafd6d3b..e1c66e236d8 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -191,6 +191,8 @@ Parser::DeclPtrTy Parser::ParseLinkage(ParsingDeclSpec &DS, SourceLocation()); } + DS.abort(); + if (Attr.HasAttr) Diag(Attr.Range.getBegin(), diag::err_attributes_not_allowed) << Attr.Range; diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index f15b39a83e6..2558b667581 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -593,7 +593,6 @@ Parser::ParseDeclarationOrFunctionDefinition(ParsingDeclSpec &DS, if (Tok.is(tok::string_literal) && getLang().CPlusPlus && DS.getStorageClassSpec() == DeclSpec::SCS_extern && DS.getParsedSpecifiers() == DeclSpec::PQ_StorageClassSpecifier) { - DS.abort(); DeclPtrTy TheDecl = ParseLinkage(DS, Declarator::FileContext); return Actions.ConvertDeclToDeclGroup(TheDecl); } diff --git a/clang/test/CodeGenCXX/extern-c.cpp b/clang/test/CodeGenCXX/extern-c.cpp index 427a45aebb1..ca5cd7372ca 100644 --- a/clang/test/CodeGenCXX/extern-c.cpp +++ b/clang/test/CodeGenCXX/extern-c.cpp @@ -10,4 +10,7 @@ extern int b; // RUN: grep "@_ZN3foo1cE = global i32" %t | count 1 int c = 5; +// RUN: not grep "@_ZN3foo1dE" %t +extern "C" struct d; + } |

