re PR lto/44246 (ICE with -fwhopr/-flto when using strlen and strcat without previous declaration)

PR lto/44246
	* lto-cgraph.c (input_cgraph_1, input_varpool_1): Avoid
	processing same node twice.
	* gcc.c-torture/compile/pr44246.c:New file.

From-SVN: r164425
This commit is contained in:
Jan Hubicka 2010-09-19 23:49:28 +02:00 committed by Jan Hubicka
parent a963da4d48
commit d1f6261f39
4 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-09-19 Jan Hubicka <jh@suse.cz>
PR lto/44246
* lto-cgraph.c (input_cgraph_1, input_varpool_1): Avoid
processing same node twice.
2010-09-19 Anatoly Sokolov <aesok@post.ru>
* config/bfin/bfin.h (CLASS_LIKELY_SPILLED_P): Remove.

View File

@ -1292,11 +1292,20 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
len = lto_input_uleb128 (ib);
}
/* AUX pointers should be all non-zero for nodes read from the stream. */
#ifdef ENABLE_CHECKING
FOR_EACH_VEC_ELT (cgraph_node_ptr, nodes, i, node)
gcc_assert (node->aux);
#endif
FOR_EACH_VEC_ELT (cgraph_node_ptr, nodes, i, node)
{
int ref = (int) (intptr_t) node->global.inlined_to;
/* We share declaration of builtins, so we may read same node twice. */
if (!node->aux)
continue;
node->aux = NULL;
/* Fixup inlined_to from reference to pointer. */
if (ref != LCC_NOT_FOUND)
node->global.inlined_to = VEC_index (cgraph_node_ptr, nodes, ref);
@ -1311,6 +1320,8 @@ input_cgraph_1 (struct lto_file_decl_data *file_data,
else
node->same_comdat_group = NULL;
}
FOR_EACH_VEC_ELT (cgraph_node_ptr, nodes, i, node)
node->aux = (void *)1;
return nodes;
}
@ -1332,9 +1343,17 @@ input_varpool_1 (struct lto_file_decl_data *file_data,
input_varpool_node (file_data, ib));
len--;
}
#ifdef ENABLE_CHECKING
FOR_EACH_VEC_ELT (varpool_node_ptr, varpool, i, node)
gcc_assert (!node->aux);
#endif
FOR_EACH_VEC_ELT (varpool_node_ptr, varpool, i, node)
{
int ref = (int) (intptr_t) node->same_comdat_group;
/* We share declaration of builtins, so we may read same node twice. */
if (node->aux)
continue;
node->aux = (void *)1;
/* Fixup same_comdat_group from reference to pointer. */
if (ref != LCC_NOT_FOUND)
@ -1342,6 +1361,8 @@ input_varpool_1 (struct lto_file_decl_data *file_data,
else
node->same_comdat_group = NULL;
}
FOR_EACH_VEC_ELT (varpool_node_ptr, varpool, i, node)
node->aux = NULL;
return varpool;
}

View File

@ -1,3 +1,8 @@
2010-09-19 Jan Hubicka <jh@suse.cz>
PR lto/44246
* gcc.c-torture/compile/pr44246.c:New file.
2010-09-19 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/45714

View File

@ -0,0 +1,5 @@
int main(int argc, char *argv[])
{
strcat(argv[0], "X");
return strlen(argv[0]);
}