summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReaderDecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-01-22 02:21:23 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-01-22 02:21:23 +0000
commitf1f4bc217627a6593246f837bb1bcbef3cc92ad6 (patch)
tree1f68b3212d81b19d34b7af8c882d019581dabcd9 /clang/lib/Serialization/ASTReaderDecl.cpp
parent00270df5175e97951836f4aa721d45c902f4b4ee (diff)
downloadbcm5719-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.cpp14
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);
OpenPOWER on IntegriCloud