diff options
author | Jason Merrill <jason@redhat.com> | 2009-01-16 17:36:11 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2009-01-16 17:36:11 -0500 |
commit | db8470f688f2f2f8ac3be4a971961b76aff7909b (patch) | |
tree | f245a325b6bf4285c7963b39fb65097ad0ac0944 /gcc | |
parent | 5be1c58c4de4f21561b39fd72e9861ec087a1374 (diff) | |
download | gcc-db8470f688f2f2f8ac3be4a971961b76aff7909b.zip gcc-db8470f688f2f2f8ac3be4a971961b76aff7909b.tar.gz gcc-db8470f688f2f2f8ac3be4a971961b76aff7909b.tar.bz2 |
re PR c++/29470 (Using declaration access semantics change with templates)
PR c++/29470
* pt.c (tsubst_decl) [USING_DECL]: Propagate access flags.
From-SVN: r143445
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/access20.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr34641.C | 1 |
5 files changed, 33 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 395873c..ff0de59 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-01-16 Jason Merrill <jason@redhat.com> + PR c++/29470 + * pt.c (tsubst_decl) [USING_DECL]: Propagate access flags. + PR c++/38579 * search.c (protected_accessible_p): N doesn't vary. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 0378d39..f6809f2 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8485,6 +8485,11 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) tsubst_copy (DECL_NAME (t), args, complain, in_decl)); if (!r) r = error_mark_node; + else + { + TREE_PROTECTED (r) = TREE_PROTECTED (t); + TREE_PRIVATE (r) = TREE_PRIVATE (t); + } } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a7084b7..69660e7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-01-16 Jason Merrill <jason@redhat.com> + + PR c++/29470 + * g++.dg/template/access20.C: New test. + * g++.dg/torture/pr34641.C: Fix access. + 2009-01-16 Richard Guenther <rguenther@suse.de> PR tree-optimization/38835 diff --git a/gcc/testsuite/g++.dg/template/access20.C b/gcc/testsuite/g++.dg/template/access20.C new file mode 100644 index 0000000..ebf575e --- /dev/null +++ b/gcc/testsuite/g++.dg/template/access20.C @@ -0,0 +1,18 @@ +// PR c++/29470 + +template <typename T> struct B +{ + protected: + T v; // { dg-error "protected" } +}; +template <typename T> struct D : B<T> +{ + protected: + using B<T>::v; +}; +int main() +{ + D<int> d; + d.v = 0; // { dg-error "context" } + return 0; +} diff --git a/gcc/testsuite/g++.dg/torture/pr34641.C b/gcc/testsuite/g++.dg/torture/pr34641.C index 9e4f266..0cf5077 100644 --- a/gcc/testsuite/g++.dg/torture/pr34641.C +++ b/gcc/testsuite/g++.dg/torture/pr34641.C @@ -70,6 +70,7 @@ template < typename T, size_t inlineCapacity > class VectorBuffer; template < typename T > class VectorBuffer < T, 0 >:private VectorBufferBase < T > { +public: typedef VectorBufferBase < T > Base; using Base::allocateBuffer; }; |