diff options
author | Jan Hubicka <jh@suse.cz> | 2012-05-23 11:23:40 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2012-05-23 09:23:40 +0000 |
commit | 66379195d6b0ec5912b032e6366820258c0e92e3 (patch) | |
tree | 4986305f859a5ad3363c50db643ae1108d0ee0e4 | |
parent | b8ce6b9cc0db94756438606b8bae88d14f14f668 (diff) | |
download | gcc-66379195d6b0ec5912b032e6366820258c0e92e3.zip gcc-66379195d6b0ec5912b032e6366820258c0e92e3.tar.gz gcc-66379195d6b0ec5912b032e6366820258c0e92e3.tar.bz2 |
re PR middle-end/53161 (ICE with weakref function and a function which takes vector types)
PR middle-end/53161
* symtab.c (symtab_register_node): Fix ordering issue.
From-SVN: r187798
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/symtab.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr53161.C | 22 |
4 files changed, 36 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b601c9..ee5d718 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-22 Jan Hubicka <jh@suse.cz> + + PR middle-end/53161 + * symtab.c (symtab_register_node): Fix ordering issue. + 2012-05-22 Steven Drake <sbd@NetBSD.org> * gcc.c (do_spec_1): Add %M spec token to output multilib_os_dir. diff --git a/gcc/symtab.c b/gcc/symtab.c index 1d9fdd8..665ceae 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -177,11 +177,13 @@ symtab_register_node (symtab_node node) if (*slot == NULL) *slot = node; - insert_to_assembler_name_hash (node); + ipa_empty_ref_list (&node->symbol.ref_list); node->symbol.order = symtab_order++; - ipa_empty_ref_list (&node->symbol.ref_list); + /* Be sure to do this last; C++ FE might create new nodes via + DECL_ASSEMBLER_NAME langhook! */ + insert_to_assembler_name_hash (node); } /* Make NODE to be the one symtab hash is pointing to. Used when reshaping tree diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21f448d..09bc357 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-05-22 Jan Hubicka <jh@suse.cz> + + PR middle-end/53161 + * g++.dg/torture/pr53161.C: New testcase. + 2012-05-22 Tobias Burnus <burnus@net-b.de> PR fortran/53389 diff --git a/gcc/testsuite/g++.dg/torture/pr53161.C b/gcc/testsuite/g++.dg/torture/pr53161.C new file mode 100644 index 0000000..766f294 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr53161.C @@ -0,0 +1,22 @@ +/* { dg-options "-std=c++11" } */ +void gg(); +static __typeof(gg) __gthrw_gg __attribute__((__weakref__("gg"))); + +template<typename R,typename... A> +struct data { + template<typename Y,typename X> + data(Y& y,R(X::*f)(A...)); +}; + +template<typename Y,typename X,typename R,typename... A> +data<R,A...> make_data(Y& y,R(X::*f)(A...)) { + return data<R,A...>(y,f); +} + +void global(data<void>); + +struct test { + void bar() {} + void doit() { global(make_data(*this,&test::bar)); } +}; + |