summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-28 16:08:02 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-28 16:08:02 +0000
commit566f872fc69b06b7ec6941bdb6c76df862ac60a4 (patch)
tree2419cf0c920ad4437cda9f7d671ade83c7f294b4
parent9361db200421394697270afe5b7434919ef20fbf (diff)
downloadppe42-gcc-566f872fc69b06b7ec6941bdb6c76df862ac60a4.tar.gz
ppe42-gcc-566f872fc69b06b7ec6941bdb6c76df862ac60a4.zip
PR c++/32596
PR c++/32400 * pt.c (check_explicit_specialization): Set DECL_INTERFACE_KNOWN and DECL_NOT_REALLY_EXTERN if tmpl_func is not public. * g++.dg/ext/visibility/anon5.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127863 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/visibility/anon5.C8
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 03d6b51c1a6..f612c9cb9d6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2007-08-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/32596
+ PR c++/32400
+ * pt.c (check_explicit_specialization): Set DECL_INTERFACE_KNOWN
+ and DECL_NOT_REALLY_EXTERN if tmpl_func is not public.
+
2007-08-27 Jason Merrill <jason@redhat.com>
PR c++/28558
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 1bbe6cb80c6..e33197c5c45 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -2217,6 +2217,11 @@ check_explicit_specialization (tree declarator,
/* This specialization has the same linkage and visibility as
the function template it specializes. */
TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
+ if (! TREE_PUBLIC (decl))
+ {
+ DECL_INTERFACE_KNOWN (decl) = 1;
+ DECL_NOT_REALLY_EXTERN (decl) = 1;
+ }
DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1ab202ab167..0bbe27a9bef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/32596
+ * g++.dg/ext/visibility/anon5.C: New test.
+
2007-07-28 Dominique d'Humieres <dominiq@lps.ens.fr>
* gfortran.dg/gamma_4.f90: Fix large-real kind selection.
diff --git a/gcc/testsuite/g++.dg/ext/visibility/anon5.C b/gcc/testsuite/g++.dg/ext/visibility/anon5.C
new file mode 100644
index 00000000000..d069eeab661
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/visibility/anon5.C
@@ -0,0 +1,8 @@
+// PR c++/32596
+// { dg-do compile }
+
+namespace
+{
+ template<class T> inline void char_less(void) { }
+ template<> inline void char_less<char>(void) { }
+}
OpenPOWER on IntegriCloud