aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-07 08:38:28 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-07 08:38:28 +0000
commit63a011378d4b9483ce24400c163cb8d65ea096a5 (patch)
treefea176eea65e59673f91d8dc0ec1ea7cdcc12b78
parenteb7f96141f754150a92433286fa385910a22f494 (diff)
Fix assertion failure when parsing linkage specifications (PR5921),
from Keir Mierle! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95516 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Parse/ParseDeclCXX.cpp2
-rw-r--r--lib/Parse/Parser.cpp1
-rw-r--r--test/CodeGenCXX/extern-c.cpp3
3 files changed, 5 insertions, 1 deletions
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index c24bafd6d3..e1c66e236d 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/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/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index f15b39a83e..2558b66758 100644
--- a/lib/Parse/Parser.cpp
+++ b/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/test/CodeGenCXX/extern-c.cpp b/test/CodeGenCXX/extern-c.cpp
index 427a45aebb..ca5cd7372c 100644
--- a/test/CodeGenCXX/extern-c.cpp
+++ b/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;
+
}