Commit ce41114b by Jakub Jelinek

re PR c++/34213 (static member function in anonymous namespace can't be used as template argument)

	PR c++/34213
	* tree.c (decl_linkage): Static data members and static member
	functions in anonymous ns classes are lk_external.

	* g++.dg/ext/visibility/anon8.C: New test.

From-SVN: r130463
parent 381d3db6
2007-11-27 Jakub Jelinek <jakub@redhat.com>
PR c++/34213
* tree.c (decl_linkage): Static data members and static member
functions in anonymous ns classes are lk_external.
2007-11-26 Andreas Krebbel <krebbel1@de.ibm.com> 2007-11-26 Andreas Krebbel <krebbel1@de.ibm.com>
PR 34081/C++ PR c++/34081
* decl.c (start_preparsed_function): Pass * decl.c (start_preparsed_function): Pass
processing_template_decl for the new allocate_struct_function processing_template_decl for the new allocate_struct_function
parameter. parameter.
......
...@@ -2526,10 +2526,18 @@ decl_linkage (tree decl) ...@@ -2526,10 +2526,18 @@ decl_linkage (tree decl)
/* Members of the anonymous namespace also have TREE_PUBLIC unset, but /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
are considered to have external linkage for language purposes. DECLs are considered to have external linkage for language purposes. DECLs
really meant to have internal linkage have DECL_THIS_STATIC set. */ really meant to have internal linkage have DECL_THIS_STATIC set. */
if (TREE_CODE (decl) == TYPE_DECL if (TREE_CODE (decl) == TYPE_DECL)
|| ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
&& !DECL_THIS_STATIC (decl)))
return lk_external; return lk_external;
if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
{
if (!DECL_THIS_STATIC (decl))
return lk_external;
/* Static data members and static member functions from classes
in anonymous namespace also don't have TREE_PUBLIC set. */
if (DECL_CLASS_CONTEXT (decl))
return lk_external;
}
/* Everything else has internal linkage. */ /* Everything else has internal linkage. */
return lk_internal; return lk_internal;
......
2007-11-27 Jakub Jelinek <jakub@redhat.com>
PR c++/34213
* g++.dg/ext/visibility/anon8.C: New test.
2007-11-13 Michael Meissner <michael.meissner@amd.com> 2007-11-13 Michael Meissner <michael.meissner@amd.com>
PR target/34077 PR target/34077
...@@ -22,7 +27,7 @@ ...@@ -22,7 +27,7 @@
2007-11-26 Andreas Krebbel <krebbel1@de.ibm.com> 2007-11-26 Andreas Krebbel <krebbel1@de.ibm.com>
PR 34081/C++ PR c++/34081
* g++.dg/template/dependent-expr6.C: New testcase. * g++.dg/template/dependent-expr6.C: New testcase.
2007-11-26 Uros Bizjak <ubizjak@gmail.com> 2007-11-26 Uros Bizjak <ubizjak@gmail.com>
// PR c++/34213
// { dg-do compile }
template <void (*fn) ()>
void call ()
{
fn ();
}
namespace
{
struct B1
{
static void fn1 () {}
static void fn4 ();
};
void fn3 () {}
void B1::fn4 () {}
static void fn5 () {}
}
int main ()
{
struct B2
{
static void fn2 () {}
};
call<&B1::fn1> ();
call<&B2::fn2> (); // { dg-error "not external linkage|no matching" }
call<&fn3> ();
call<&B1::fn4> ();
call<&fn5> (); // { dg-error "not external linkage|no matching" }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment