mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 00:30:36 +08:00
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:
parent
fd7588bcde
commit
a9cc44581a
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
11
gcc/testsuite/gcc.dg/lto/20090914-2_0.c
Normal file
11
gcc/testsuite/gcc.dg/lto/20090914-2_0.c
Normal 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");
|
Loading…
x
Reference in New Issue
Block a user