When checking the redeclaration context of a typedef that refers to a

tag of the same name, compare the lookup contexts rather than the
actual contexts. Fixes PR6923.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102437 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2010-04-27 16:26:47 +00:00
Родитель a6a292b4dc
Коммит c8fd2dae17
2 изменённых файлов: 13 добавлений и 1 удалений

Просмотреть файл

@ -5029,7 +5029,8 @@ Sema::DeclPtrTy Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
if (const TagType *TT = TD->getUnderlyingType()->getAs<TagType>()) {
TagDecl *Tag = TT->getDecl();
if (Tag->getDeclName() == Name &&
Tag->getDeclContext()->Equals(TD->getDeclContext())) {
Tag->getDeclContext()->getLookupContext()
->Equals(TD->getDeclContext()->getLookupContext())) {
PrevDecl = Tag;
Previous.clear();
Previous.addDecl(Tag);

Просмотреть файл

@ -37,3 +37,14 @@ namespace test1 {
using namespace a;
foo x;
}
namespace PR6923 {
struct A;
extern "C" {
struct A;
typedef struct A A;
}
struct A;
}