diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-01-22 02:21:23 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-01-22 02:21:23 +0000 |
commit | f1f4bc217627a6593246f837bb1bcbef3cc92ad6 (patch) | |
tree | 1f68b3212d81b19d34b7af8c882d019581dabcd9 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 00270df5175e97951836f4aa721d45c902f4b4ee (diff) | |
download | bcm5719-llvm-f1f4bc217627a6593246f837bb1bcbef3cc92ad6.tar.gz bcm5719-llvm-f1f4bc217627a6593246f837bb1bcbef3cc92ad6.zip |
[modules] If we load two declarations with typedef names for linkage purposes
on top of a local declaration of the same entity, we still need to remember
that we loaded the first one or we may fail to merge the second one properly.
llvm-svn: 226765
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 8c03b0b8b27..b82f987210f 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2554,15 +2554,21 @@ static DeclContext *getPrimaryContextForMerging(DeclContext *DC) { } ASTDeclReader::FindExistingResult::~FindExistingResult() { + // Record that we had a typedef name for linkage whether or not we merge + // with that declaration. + if (TypedefNameForLinkage) { + DeclContext *DC = New->getDeclContext()->getRedeclContext(); + Reader.ImportedTypedefNamesForLinkage.insert( + std::make_pair(std::make_pair(DC, TypedefNameForLinkage), New)); + return; + } + if (!AddResult || Existing) return; DeclarationName Name = New->getDeclName(); DeclContext *DC = New->getDeclContext()->getRedeclContext(); - if (TypedefNameForLinkage) { - Reader.ImportedTypedefNamesForLinkage.insert( - std::make_pair(std::make_pair(DC, TypedefNameForLinkage), New)); - } else if (!Name) { + if (!Name) { assert(needsAnonymousDeclarationNumber(New)); setAnonymousDeclForMerging(Reader, New->getLexicalDeclContext(), AnonymousDeclNumber, New); |