diff options
author | Mark Mitchell <mark@codesourcery.com> | 2001-02-18 00:29:00 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2001-02-18 00:29:00 +0000 |
commit | c750255cace52869888717eef672fc0494dde657 (patch) | |
tree | 326905436253f10769b32c64ce1d31ac468d4018 /gcc | |
parent | a714e5c5d34f921252d147a23ff3bc0642413824 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/access11.C | 20 |
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 +} |