summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2008-12-16 22:23:02 +0000
committerDouglas Gregor <dgregor@apple.com>2008-12-16 22:23:02 +0000
commit29ff7d0634ecded0adf4d9800dce3bfa93f7f67f (patch)
tree80bbe944733576abf9e980a9310a5888d20b9aee /clang/lib/Parse/ParseDeclCXX.cpp
parent904ce8120d2f93eb20f287cbab9dee5ec1ff22d0 (diff)
downloadbcm5719-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.cpp26
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
OpenPOWER on IntegriCloud