summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-10-05 00:47:24 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-10-05 00:47:24 +0000
commitb80e7533bfb0dfd117d45596ed983b008a1e7b85 (patch)
tree1458ad266545fa58dd02202af50be1d488ace5ac
parent3ea492ad74050d6c4afe6aa00abcc4151def4214 (diff)
downloadbcm5719-llvm-b80e7533bfb0dfd117d45596ed983b008a1e7b85.tar.gz
bcm5719-llvm-b80e7533bfb0dfd117d45596ed983b008a1e7b85.zip
PR33924: Merge block-scope anonymous declarations if there are multiple definitions of the enclosing function.
llvm-svn: 314956
-rw-r--r--clang/lib/Serialization/ASTCommon.cpp4
-rw-r--r--clang/lib/Serialization/ASTReaderDecl.cpp1
2 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTCommon.cpp b/clang/lib/Serialization/ASTCommon.cpp
index 9c6f03cd0bb..7519dc239c0 100644
--- a/clang/lib/Serialization/ASTCommon.cpp
+++ b/clang/lib/Serialization/ASTCommon.cpp
@@ -344,8 +344,8 @@ bool serialization::needsAnonymousDeclarationNumber(const NamedDecl *D) {
return true;
}
- // Otherwise, we only care about anonymous class members.
- if (D->getDeclName() || !isa<CXXRecordDecl>(D->getLexicalDeclContext()))
+ // Otherwise, we only care about anonymous class members / block-scope decls.
+ if (D->getDeclName() || D->getLexicalDeclContext()->isFileContext())
return false;
return isa<TagDecl>(D) || isa<FieldDecl>(D);
}
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index 57f509ea6f6..118417c9305 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -467,6 +467,7 @@ FunctionDecl *ASTDeclReader::TryRegisterAsFunctionDefinition(FunctionDecl *D) {
// declaration.
if (Definition != D) {
// Already have a different definition, merge this one into it.
+ Reader.MergedDeclContexts.insert(std::make_pair(D, Definition));
Reader.mergeDefinitionVisibility(Definition, D);
}
return Definition;
OpenPOWER on IntegriCloud