diff options
| author | Douglas Gregor <dgregor@apple.com> | 2008-12-16 22:23:02 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2008-12-16 22:23:02 +0000 |
| commit | 29ff7d0634ecded0adf4d9800dce3bfa93f7f67f (patch) | |
| tree | 80bbe944733576abf9e980a9310a5888d20b9aee /clang/lib/Parse/ParseDeclCXX.cpp | |
| parent | 904ce8120d2f93eb20f287cbab9dee5ec1ff22d0 (diff) | |
| download | bcm5719-llvm-29ff7d0634ecded0adf4d9800dce3bfa93f7f67f.tar.gz bcm5719-llvm-29ff7d0634ecded0adf4d9800dce3bfa93f7f67f.zip | |
Make linkage-specifications hold on to all of their declarations
llvm-svn: 61110
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 377186713e7..ec2a37a8524 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -108,24 +108,26 @@ Parser::DeclTy *Parser::ParseLinkage(unsigned Context) { SourceLocation Loc = ConsumeStringToken(); DeclTy *D = 0; - SourceLocation LBrace, RBrace; if (Tok.isNot(tok::l_brace)) { D = ParseDeclarationOrFunctionDefinition(); - } else { - LBrace = ConsumeBrace(); - while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) { - // FIXME capture the decls. - D = ParseExternalDeclaration(); - } - - RBrace = MatchRHSPunctuation(tok::r_brace, LBrace); - } + if (D) + return Actions.ActOnLinkageSpec(Loc, LangBufPtr, StrSize, D); - if (!D) return 0; + } + + SourceLocation LBrace = ConsumeBrace(); + llvm::SmallVector<DeclTy *, 8> InnerDecls; + while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) { + D = ParseExternalDeclaration(); + if (D) + InnerDecls.push_back(D); + } - return Actions.ActOnLinkageSpec(Loc, LBrace, RBrace, LangBufPtr, StrSize, D); + SourceLocation RBrace = MatchRHSPunctuation(tok::r_brace, LBrace); + return Actions.ActOnLinkageSpec(Loc, LBrace, RBrace, LangBufPtr, StrSize, + &InnerDecls.front(), InnerDecls.size()); } /// ParseClassName - Parse a C++ class-name, which names a class. Note |

