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 | dbda370edbca549da400d99d15aea1e720e268ff (patch) | |
tree | 6e3eab39f3e86d887ccefb9d3d6fc571396d09f6 /lib | |
parent | 79dee32466a86971634a0154dc4f630057f05c69 (diff) | |
download | clang-dbda370edbca549da400d99d15aea1e720e268ff.tar.gz |
PR33924: Merge block-scope anonymous declarations if there are multiple definitions of the enclosing function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@314956 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Serialization/ASTCommon.cpp | 4 | ||||
-rw-r--r-- | lib/Serialization/ASTReaderDecl.cpp | 1 |
2 files changed, 3 insertions, 2 deletions
diff --git a/lib/Serialization/ASTCommon.cpp b/lib/Serialization/ASTCommon.cpp index 9c6f03cd0b..7519dc239c 100644 --- a/lib/Serialization/ASTCommon.cpp +++ b/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/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 57f509ea6f..118417c930 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/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; |