diff options
Diffstat (limited to 'gcc/tree-eh.c')
-rw-r--r-- | gcc/tree-eh.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index a7dd72b..9c17c1e 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -3857,7 +3857,7 @@ cleanup_all_empty_eh (void) */ static unsigned int -execute_cleanup_eh (void) +execute_cleanup_eh_1 (void) { /* Do this first: unsplit_all_eh and cleanup_all_empty_eh can die looking up unreachable landing pads. */ @@ -3891,6 +3891,21 @@ execute_cleanup_eh (void) return 0; } +static unsigned int +execute_cleanup_eh (void) +{ + int ret = execute_cleanup_eh_1 (); + + /* If the function no longer needs an EH personality routine + clear it. This exposes cross-language inlining opportunities + and avoids references to a never defined personality routine. */ + if (DECL_FUNCTION_PERSONALITY (current_function_decl) + && function_needs_eh_personality (cfun) != eh_personality_lang) + DECL_FUNCTION_PERSONALITY (current_function_decl) = NULL_TREE; + + return ret; +} + static bool gate_cleanup_eh (void) { |