===================================================================
@@ -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)))
===================================================================
@@ -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);
+}