mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 23:41:28 +08:00
re PR c++/28279 (ICE in finish_static_data_member_decl, at cp/decl2.c:716)
PR c++/28279 * decl2.c (finish_static_data_member_decl): Don't assert TREE_PUBLIC. From-SVN: r115228
This commit is contained in:
parent
0ac5ccd149
commit
1f0b926a1f
@ -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
|
||||
|
@ -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))
|
||||
|
15
gcc/testsuite/g++.dg/template/anon2.C
Normal file
15
gcc/testsuite/g++.dg/template/anon2.C
Normal file
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user