From: Douglas Gregor Date: Sun, 7 Feb 2010 08:38:28 +0000 (+0000) Subject: Fix assertion failure when parsing linkage specifications (PR5921), X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=63a011378d4b9483ce24400c163cb8d65ea096a5;p=clang 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 --- 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; + }