From: Axel Naumann Date: Tue, 2 Oct 2012 13:06:13 +0000 (+0000) Subject: Add redecls into their lexical DeclContext: this is what they assert on, and the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bb2011db250de41f69fdbaaa35ff78310a7499f1;p=clang Add redecls into their lexical DeclContext: this is what they assert on, and the merging should have set it correctly. This is especially relevant for templatedDecls that might be injected (and thus have their DeclContext set to) somewhere completely different. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165005 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index e770c06519..4f2da6bc51 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -1775,7 +1775,7 @@ ASTDeclReader::FindExistingResult::~FindExistingResult() { if (!AddResult || Existing) return; - DeclContext *DC = New->getDeclContext()->getRedeclContext(); + DeclContext *DC = New->getLexicalDeclContext(); if (DC->isTranslationUnit() && Reader.SemaObj) { if (Reader.SemaObj->IdResolver.tryAddTopLevelDecl(New, New->getDeclName())) Reader.RedeclsAddedToAST.insert(New); diff --git a/test/Modules/Inputs/templates-top.h b/test/Modules/Inputs/templates-top.h index 80ecf23ea4..5985ee8820 100644 --- a/test/Modules/Inputs/templates-top.h +++ b/test/Modules/Inputs/templates-top.h @@ -4,3 +4,14 @@ template class List { public: void push_back(T); }; + +namespace A { + class Y { + template friend class WhereAmI; + }; +} + +template class A::WhereAmI { +public: + static void func() {} +};