]> granicus.if.org Git - clang/commitdiff
Fixed lexical declaration context when instantiating a friend / out-of-line class...
authorAbramo Bagnara <abramo.bagnara@gmail.com>
Sat, 26 Nov 2011 13:33:46 +0000 (13:33 +0000)
committerAbramo Bagnara <abramo.bagnara@gmail.com>
Sat, 26 Nov 2011 13:33:46 +0000 (13:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145146 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateDecl.cpp

index c20033bbc258fd24af4184a74e851b0d065ca341..9477192e2352fd48f877ce38753b83b142667d52 100644 (file)
@@ -862,9 +862,16 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {
   // Finish handling of friends.
   if (isFriend) {
     DC->makeDeclVisibleInContext(Inst, /*Recoverable*/ false);
+    Inst->setLexicalDeclContext(Owner);
+    RecordInst->setLexicalDeclContext(Owner);
     return Inst;
   }
 
+  if (D->isOutOfLine()) {
+    Inst->setLexicalDeclContext(D->getLexicalDeclContext());
+    RecordInst->setLexicalDeclContext(D->getLexicalDeclContext());
+  }
+
   Owner->addDecl(Inst);
 
   if (!PrevClassTemplate) {