From: Mark Mitchell Date: Wed, 2 Nov 2005 18:30:26 +0000 (+0000) Subject: re PR c++/24569 (ICE in add_AT_specification, at dwarf2out.c:4966) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86414779a6d1a126eca6281af2dffada41e4fab3;p=gcc.git re PR c++/24569 (ICE in add_AT_specification, at dwarf2out.c:4966) PR c++/24569 * pt.c (instantiate_decl): Use cp_finish_decl, not finish_static_data_member_decl. PR c++/24569 * g++.dg/debug/static1.C: New test. From-SVN: r106392 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8776b1f5b65..410c88f0530 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-11-02 Mark Mitchell + + PR c++/24569 + * pt.c (instantiate_decl): Use cp_finish_decl, not + finish_static_data_member_decl. + 2005-10-28 Andrew Pinski * decl.c (grokfndecl): Remove the setting diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 62db1229b21..ecfc6d1573d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -11630,10 +11630,9 @@ instantiate_decl (tree d, int defer_ok, init = tsubst_expr (DECL_INITIAL (code_pattern), args, tf_error | tf_warning, NULL_TREE); - DECL_INITIAL (d) = NULL_TREE; - finish_static_data_member_decl (d, init, - /*asmspec_tree=*/NULL_TREE, - LOOKUP_ONLYCONVERTING); + DECL_INITIAL (d) = init; + cp_finish_decl (d, init, /*asmspec_tree=*/NULL_TREE, + LOOKUP_ONLYCONVERTING); pop_nested_class (); pop_nested_namespace (ns); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd31f902287..04a33426430 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-11-02 Mark Mitchell + + PR c++/24569 + * g++.dg/debug/static1.C: New test. + 2005-11-02 Josh Conner * g++.dg/crash38.C: moved into proper directory... diff --git a/gcc/testsuite/g++.dg/debug/static1.C b/gcc/testsuite/g++.dg/debug/static1.C new file mode 100644 index 00000000000..7419ce5077f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/static1.C @@ -0,0 +1,16 @@ +// PR c++/24569 + +template +struct S +{ + static const int u = 2 * dim; + static const int p[u]; + static int f(); +}; + +template <> +inline int S<3>::f () { return 1; } + +template const int S::u; + +template class S<3>;