Set the access specifier for templates inside classes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67726 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
index b8b1f3a..697582c 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -503,6 +503,9 @@
NewClass, PrevClassTemplate);
NewClass->setDescribedClassTemplate(NewTemplate);
+ // Set the access specifier.
+ SetMemberAccessSpecifier(NewTemplate, PrevClassTemplate, AS);
+
// Set the lexical context of these templates
NewClass->setLexicalDeclContext(CurContext);
NewTemplate->setLexicalDeclContext(CurContext);
diff --git a/test/SemaCXX/access.cpp b/test/SemaCXX/access.cpp
index d95781c..cfbc9c8 100644
--- a/test/SemaCXX/access.cpp
+++ b/test/SemaCXX/access.cpp
@@ -2,8 +2,8 @@
class C {
struct S; // expected-note {{previously declared 'private' here}}
-
public:
+
struct S {}; // expected-error {{'S' redeclared with 'public' access}}
};
@@ -12,4 +12,12 @@
private:
class C { }; // expected-error {{'C' redeclared with 'private' access}}
-};
\ No newline at end of file
+};
+
+class T {
+protected:
+ template<typename T> struct A; // expected-note {{previously declared 'protected' here}}
+
+private:
+ template<typename T> struct A {}; // expected-error {{'A' redeclared with 'private' access}}
+};