summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-08-30 19:13:18 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-08-30 19:13:18 +0000
commit3fb1a8554de714cf7e01b8b57b4d073d170676da (patch)
tree5f22e1a726a0c80a78cf2db24ee9f59480104dde
parent73b8dbdd9409f6e2bff76b67c16a9ad1e8333a29 (diff)
downloadbcm5719-llvm-3fb1a8554de714cf7e01b8b57b4d073d170676da.tar.gz
bcm5719-llvm-3fb1a8554de714cf7e01b8b57b4d073d170676da.zip
PR29166: when merging declarations with typedef names for linkage purposes,
don't assume that the anonymous struct will be part of the most recent declaration of the typedef. llvm-svn: 280136
-rw-r--r--clang/lib/Serialization/ASTReaderDecl.cpp2
-rw-r--r--clang/test/Modules/merge-name-for-linkage.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index e00c9561cd8..620e1fed300 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2887,7 +2887,7 @@ static NamedDecl *getDeclForMerging(NamedDecl *Found,
return nullptr;
if (auto *TND = dyn_cast<TypedefNameDecl>(Found))
- return TND->getAnonDeclWithTypedefName();
+ return TND->getAnonDeclWithTypedefName(/*AnyRedecl*/true);
return nullptr;
}
diff --git a/clang/test/Modules/merge-name-for-linkage.cpp b/clang/test/Modules/merge-name-for-linkage.cpp
index da1664ca343..75534bd661b 100644
--- a/clang/test/Modules/merge-name-for-linkage.cpp
+++ b/clang/test/Modules/merge-name-for-linkage.cpp
@@ -2,6 +2,7 @@
// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I%S/Inputs/merge-name-for-linkage -verify %s
// expected-no-diagnostics
typedef union {} pthread_mutex_t;
+typedef pthread_mutex_t pthread_mutex_t;
#include "a.h"
pthread_mutex_t x;
#include "b.h"
OpenPOWER on IntegriCloud