aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2009-01-16 17:36:11 -0500
committerJason Merrill <jason@gcc.gnu.org>2009-01-16 17:36:11 -0500
commitdb8470f688f2f2f8ac3be4a971961b76aff7909b (patch)
treef245a325b6bf4285c7963b39fb65097ad0ac0944 /gcc
parent5be1c58c4de4f21561b39fd72e9861ec087a1374 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/template/access20.C18
-rw-r--r--gcc/testsuite/g++.dg/torture/pr34641.C1
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;
};