re PR c++/57945 (ICE: in varpool_get_node, at cgraph.h:840)

PR c++/57945
	* passes.c (rest_of_decl_compilation): Don't call varpool_finalize_decl
	on decls for which assemble_alias has been called.

	* c-c++-common/torture/pr57945.c: New test.

From-SVN: r206708
This commit is contained in:
Jakub Jelinek 2014-01-17 15:19:55 +01:00
parent d4f283a153
commit 24fcf4bc0c
4 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2014-01-17 Jan Hubicka <hubicka@ucw.cz>
PR c++/57945
* passes.c (rest_of_decl_compilation): Don't call varpool_finalize_decl
on decls for which assemble_alias has been called.
2014-01-17 Nick Clifton <nickc@redhat.com>
* config/msp430/msp430.opt: (mcpu): New option.

View File

@ -187,6 +187,8 @@ rest_of_decl_compilation (tree decl,
int top_level,
int at_end)
{
bool finalize = true;
/* We deferred calling assemble_alias so that we could collect
other attributes such as visibility. Emit the alias now. */
if (!in_lto_p)
@ -203,6 +205,7 @@ rest_of_decl_compilation (tree decl,
DECL_EXTERNAL (decl) = 0;
TREE_STATIC (decl) = 1;
assemble_alias (decl, alias);
finalize = false;
}
}
@ -234,7 +237,7 @@ rest_of_decl_compilation (tree decl,
rebuild it. */
if (in_lto_p && !at_end)
;
else if (TREE_CODE (decl) != FUNCTION_DECL)
else if (finalize && TREE_CODE (decl) != FUNCTION_DECL)
varpool_finalize_decl (decl);
}

View File

@ -1,3 +1,8 @@
2014-01-17 Jakub Jelinek <jakub@redhat.com>
PR c++/57945
* c-c++-common/torture/pr57945.c: New test.
2014-01-17 Zhenqiang Chen <zhenqiang.chen@arm.com>
* gcc.target/arm/its.c: New testcase.

View File

@ -0,0 +1,11 @@
/* PR c++/57945 */
/* { dg-do compile } */
extern int j;
static int i __attribute__((weakref("j")));
int
foo (void)
{
return &i ? i : 0;
}