diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-05 00:47:24 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-05 00:47:24 +0000 |
commit | b80e7533bfb0dfd117d45596ed983b008a1e7b85 (patch) | |
tree | 1458ad266545fa58dd02202af50be1d488ace5ac | |
parent | 3ea492ad74050d6c4afe6aa00abcc4151def4214 (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 1 |
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; |