summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-06 18:39:39 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-06 18:39:39 +0000
commite19482edb5848850c00fd868971f387185cfbfd3 (patch)
tree09e431a3d861945a30a4c131ce36186af54e5fea
parentccee5c089f583b321b20913085bc42a2263ac576 (diff)
downloadppe42-gcc-e19482edb5848850c00fd868971f387185cfbfd3.tar.gz
ppe42-gcc-e19482edb5848850c00fd868971f387185cfbfd3.zip
PR c++/28279
* decl2.c (finish_static_data_member_decl): Don't assert TREE_PUBLIC. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115228 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl2.c4
-rw-r--r--gcc/testsuite/g++.dg/template/anon2.C15
3 files changed, 22 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3d3952cb681..b7929640c01 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-07-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/28279
+ * decl2.c (finish_static_data_member_decl): Don't assert
+ TREE_PUBLIC.
+
2006-07-05 Jason Merrill <jason@redhat.com>
PR c++/13983
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 0964bf5de84..defeafbf551 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -713,15 +713,13 @@ finish_static_data_member_decl (tree decl,
tree asmspec_tree,
int flags)
{
- gcc_assert (TREE_PUBLIC (decl));
-
DECL_CONTEXT (decl) = current_class_type;
/* We cannot call pushdecl here, because that would fill in the
TREE_CHAIN of our decl. Instead, we modify cp_finish_decl to do
the right thing, namely, to put this decl out straight away. */
- if (! processing_template_decl)
+ if (! processing_template_decl && TREE_PUBLIC (decl))
note_vague_linkage_var (decl);
if (LOCAL_CLASS_P (current_class_type))
diff --git a/gcc/testsuite/g++.dg/template/anon2.C b/gcc/testsuite/g++.dg/template/anon2.C
new file mode 100644
index 00000000000..75285ade379
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/anon2.C
@@ -0,0 +1,15 @@
+// PR c++/28279
+// finish_static_data_member_decl was confused by the anonymous
+// namespace causing TREE_PUBLIC to be unset
+
+template<typename T>
+struct is_pointer_impl {
+ static const bool value = true;
+};
+
+namespace {
+ class prefix_name_mapper {};
+}
+
+static const bool val = is_pointer_impl<prefix_name_mapper>::value;
+
OpenPOWER on IntegriCloud