re PR middle-end/51949 (expand_call: seg fault caused by IPA split)

2012-01-23  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/51949
	* ipa-split.c (execute_split_functions): Do not split malloc
	functions.

	* gcc.dg/torture/pr51949.c: New testcase.

From-SVN: r183424
This commit is contained in:
Richard Guenther 2012-01-23 10:52:57 +00:00 committed by Richard Biener
parent dd91386dc6
commit b2d2adc625
4 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2012-01-23 Richard Guenther <rguenther@suse.de>
PR tree-optimization/51949
* ipa-split.c (execute_split_functions): Do not split malloc
functions.
2012-01-23 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/51933

View File

@ -1395,10 +1395,11 @@ execute_split_functions (void)
int todo = 0;
struct cgraph_node *node = cgraph_get_node (current_function_decl);
if (flags_from_decl_or_type (current_function_decl) & ECF_NORETURN)
if (flags_from_decl_or_type (current_function_decl)
& (ECF_NORETURN|ECF_MALLOC))
{
if (dump_file)
fprintf (dump_file, "Not splitting: noreturn function.\n");
fprintf (dump_file, "Not splitting: noreturn/malloc function.\n");
return 0;
}
if (MAIN_NAME_P (DECL_NAME (current_function_decl)))

View File

@ -1,3 +1,8 @@
2012-01-23 Richard Guenther <rguenther@suse.de>
PR tree-optimization/51949
* gcc.dg/torture/pr51949.c: New testcase.
2012-01-23 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/51933

View File

@ -0,0 +1,20 @@
/* { dg-do compile } */
typedef long unsigned int size_t;
extern __attribute__ ((malloc)) void *mem_alloc(size_t);
void *mem_alloc(size_t amount)
{
void *q = __builtin_malloc (amount);
if (!q) {
__builtin_printf("malloc");
__builtin_exit(255);
}
}
void mem_realloc()
{
mem_alloc(1);
}
void put_env_var()
{
mem_alloc(1);
}