re PR lto/41281 (toplevel asms do not work)

2009-10-05  Richard Guenther  <rguenther@suse.de>

	PR lto/41281
	* lto-cgraph.c (output_cgraph): Output toplevel asms.
	(input_cgraph_1): Input toplevel asms.

	* gcc.dg/lto/20090914-2_0.c: New testcase.

From-SVN: r152453
This commit is contained in:
Richard Guenther 2009-10-05 14:30:10 +00:00 committed by Richard Biener
parent fd7588bcde
commit a9cc44581a
4 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2009-10-05 Richard Guenther <rguenther@suse.de>
PR lto/41281
* lto-cgraph.c (output_cgraph): Output toplevel asms.
(input_cgraph_1): Input toplevel asms.
2009-10-05 Richard Guenther <rguenther@suse.de>
PR lto/40902

View File

@ -318,6 +318,7 @@ output_cgraph (cgraph_node_set set)
int i, n_nodes;
bitmap written_decls;
lto_cgraph_encoder_t encoder;
struct cgraph_asm_node *can;
ob = lto_create_simple_output_block (LTO_section_cgraph);
@ -375,6 +376,18 @@ output_cgraph (cgraph_node_set set)
lto_output_uleb128_stream (ob->main_stream, 0);
/* Emit toplevel asms. */
for (can = cgraph_asm_nodes; can; can = can->next)
{
int len = TREE_STRING_LENGTH (can->asm_str);
lto_output_uleb128_stream (ob->main_stream, len);
for (i = 0; i < len; ++i)
lto_output_1_stream (ob->main_stream,
TREE_STRING_POINTER (can->asm_str)[i]);
}
lto_output_uleb128_stream (ob->main_stream, 0);
lto_destroy_simple_output_block (ob);
}
@ -573,6 +586,7 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
VEC(cgraph_node_ptr, heap) *nodes = NULL;
struct cgraph_node *node;
unsigned i;
unsigned HOST_WIDE_INT len;
tag = (enum LTO_cgraph_tags) lto_input_uleb128 (ib);
while (tag)
@ -591,6 +605,19 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
tag = (enum LTO_cgraph_tags) lto_input_uleb128 (ib);
}
/* Input toplevel asms. */
len = lto_input_uleb128 (ib);
while (len)
{
char *str = (char *)xmalloc (len + 1);
for (i = 0; i < len; ++i)
str[i] = lto_input_1_unsigned (ib);
cgraph_add_asm_node (build_string (len, str));
free (str);
len = lto_input_uleb128 (ib);
}
for (i = 0; VEC_iterate (cgraph_node_ptr, nodes, i, node); i++)
{
const int ref = (int) (intptr_t) node->global.inlined_to;

View File

@ -1,3 +1,8 @@
2009-10-05 Richard Guenther <rguenther@suse.de>
PR lto/41281
* gcc.dg/lto/20090914-2_0.c: New testcase.
2009-10-05 Richard Guenther <rguenther@suse.de>
PR lto/40902

View File

@ -0,0 +1,11 @@
/* { dg-lto-do run { target x86_64-*-* i?86-*-* } } */
/* Doesn't work without this dummy function with -fwhopr. */
int foo(void) { }
asm(".text\n"
".globl main\n"
"\t.type main,@function\n"
"main:\n"
"\txorl %eax, %eax\n"
"\tret\n");