aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2001-02-18 00:29:00 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2001-02-18 00:29:00 +0000
commitc750255cace52869888717eef672fc0494dde657 (patch)
tree326905436253f10769b32c64ce1d31ac468d4018 /gcc
parenta714e5c5d34f921252d147a23ff3bc0642413824 (diff)
downloadgcc-c750255cace52869888717eef672fc0494dde657.zip
gcc-c750255cace52869888717eef672fc0494dde657.tar.gz
gcc-c750255cace52869888717eef672fc0494dde657.tar.bz2
pt.c (check_explicit_specialization): Copy TREE_PRIVATE and TREE_PROTECTED from the template being specialized.
* pt.c (check_explicit_specialization): Copy TREE_PRIVATE and TREE_PROTECTED from the template being specialized. From-SVN: r39813
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/access11.C20
3 files changed, 30 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index efced16..e2de97a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-17 Mark Mitchell <mark@codesourcery.com>
+
+ * pt.c (check_explicit_specialization): Copy TREE_PRIVATE and
+ TREE_PROTECTED from the template being specialized.
+
2001-02-17 Jason Merrill <jason@redhat.com>
* decl2.c (build_artificial_parm): Set TREE_READONLY.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 2f34815..b28c60a 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1662,6 +1662,11 @@ check_explicit_specialization (declarator, decl, template_count, flags)
DECL is specializing. */
copy_default_args_to_explicit_spec (decl);
+ /* This specialization has the same protection as the
+ template it specializes. */
+ TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
+ TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
+
/* Mangle the function name appropriately. Note that we do
not mangle specializations of non-template member
functions of template classes, e.g. with
diff --git a/gcc/testsuite/g++.old-deja/g++.other/access11.C b/gcc/testsuite/g++.old-deja/g++.other/access11.C
new file mode 100644
index 0000000..04340c7
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/access11.C
@@ -0,0 +1,20 @@
+// Build don't link:
+// Origin: r.spatschek@fz-juelich.de
+// Special g++ Options: -w
+
+class A
+{
+private:
+ template <class T> void g(T t) {}
+ int i;
+};
+
+template <>
+void A::g<int>(int t) { i = 1; } // ERROR - private
+
+int main()
+{
+ A a;
+
+ a.g<int>(0); // ERROR - private
+}