Add redecls into their lexical DeclContext: this is what they assert on, and the...
authorAxel Naumann <Axel.Naumann@cern.ch>
Tue, 2 Oct 2012 13:06:13 +0000 (13:06 +0000)
committerAxel Naumann <Axel.Naumann@cern.ch>
Tue, 2 Oct 2012 13:06:13 +0000 (13:06 +0000)
This is especially relevant for templatedDecls that might be injected (and thus have their DeclContext set to) somewhere completely different.

llvm-svn: 165005

clang/lib/Serialization/ASTReaderDecl.cpp
clang/test/Modules/Inputs/templates-top.h

index e770c06..4f2da6b 100644 (file)
@@ -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);
index 80ecf23..5985ee8 100644 (file)
@@ -4,3 +4,14 @@ template<typename T> class List {
 public:
   void push_back(T);
 };
+
+namespace A {
+  class Y {
+    template <typename T> friend class WhereAmI;
+  };
+}
+
+template <typename T> class A::WhereAmI {
+public:
+  static void func() {}
+};