diff options
| author | John McCall <rjmccall@apple.com> | 2010-04-08 20:25:50 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-04-08 20:25:50 +0000 |
| commit | 17762b8a5d836a4199786843eb5687ea291354f9 (patch) | |
| tree | c75d28918a996704701250f4be49c8df1b1d92b0 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | |
| parent | b083c47c21054a70543566fc55a98b04b7229dee (diff) | |
| download | bcm5719-llvm-17762b8a5d836a4199786843eb5687ea291354f9.tar.gz bcm5719-llvm-17762b8a5d836a4199786843eb5687ea291354f9.zip | |
Set access properly on instantiated friend class template declarations.
Fixes PR6752.
llvm-svn: 100806
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index e4690466d30..1ac854c770c 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -753,7 +753,13 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) { D->getIdentifier(), InstParams, RecordInst, PrevClassTemplate); RecordInst->setDescribedClassTemplate(Inst); + if (isFriend) { + if (PrevClassTemplate) + Inst->setAccess(PrevClassTemplate->getAccess()); + else + Inst->setAccess(D->getAccess()); + Inst->setObjectOfFriendDecl(PrevClassTemplate != 0); // TODO: do we want to track the instantiation progeny of this // friend target decl? @@ -765,14 +771,13 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) { // Trigger creation of the type for the instantiation. SemaRef.Context.getInjectedClassNameType(RecordInst, Inst->getInjectedClassNameSpecialization(SemaRef.Context)); - + // Finish handling of friends. if (isFriend) { DC->makeDeclVisibleInContext(Inst, /*Recoverable*/ false); return Inst; } - Inst->setAccess(D->getAccess()); Owner->addDecl(Inst); // First, we sort the partial specializations by location, so |

