mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 04:00:24 +08:00
re PR c++/28370 (undefined reference to template class static variable in an anonymous namespace)
PR c++/28370 * decl2.c (note_vague_linkage_var): Removed. (finish_static_data_member_decl): Add decl to pending_statics vector directly. Do it even for non-public decls. * g++.dg/template/anon3.C: New test. From-SVN: r115503
This commit is contained in:
parent
22d67c60fa
commit
42ccbf3d11
@ -1,3 +1,10 @@
|
||||
2006-07-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/28370
|
||||
* decl2.c (note_vague_linkage_var): Removed.
|
||||
(finish_static_data_member_decl): Add decl to pending_statics vector
|
||||
directly. Do it even for non-public decls.
|
||||
|
||||
2006-07-15 Lee Millward <lee.millward@gmail.com>
|
||||
|
||||
PR c++/28292
|
||||
|
@ -700,14 +700,6 @@ note_vague_linkage_fn (tree decl)
|
||||
}
|
||||
}
|
||||
|
||||
/* Like note_vague_linkage_fn but for variables. */
|
||||
|
||||
static void
|
||||
note_vague_linkage_var (tree var)
|
||||
{
|
||||
VEC_safe_push (tree, gc, pending_statics, var);
|
||||
}
|
||||
|
||||
/* We have just processed the DECL, which is a static data member.
|
||||
The other parameters are as for cp_finish_decl. */
|
||||
|
||||
@ -723,8 +715,8 @@ finish_static_data_member_decl (tree decl,
|
||||
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 && TREE_PUBLIC (decl))
|
||||
note_vague_linkage_var (decl);
|
||||
if (! processing_template_decl)
|
||||
VEC_safe_push (tree, gc, pending_statics, decl);
|
||||
|
||||
if (LOCAL_CLASS_P (current_class_type))
|
||||
pedwarn ("local class %q#T shall not have static data member %q#D",
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-07-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/28370
|
||||
* g++.dg/template/anon3.C: New test.
|
||||
|
||||
2006-07-16 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/20844
|
||||
|
20
gcc/testsuite/g++.dg/template/anon3.C
Normal file
20
gcc/testsuite/g++.dg/template/anon3.C
Normal file
@ -0,0 +1,20 @@
|
||||
// PR c++/28370
|
||||
// { dg-do run }
|
||||
|
||||
namespace
|
||||
{
|
||||
template<typename T> struct A { static int *a; };
|
||||
template<typename T> int *A<T>::a = 0;
|
||||
}
|
||||
|
||||
int *
|
||||
foo ()
|
||||
{
|
||||
return A<int>::a;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return foo() != 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user