You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
928 B
21 lines
928 B
4 years ago
|
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
|
||
|
index 6dfbb4642..9f30b2749 100644
|
||
|
--- a/gcc/cfgexpand.c
|
||
|
+++ b/gcc/cfgexpand.c
|
||
|
@@ -316,6 +316,15 @@ stack_var_conflict_p (size_t x, size_t y)
|
||
|
struct stack_var *b = &stack_vars[y];
|
||
|
if (x == y)
|
||
|
return false;
|
||
|
+ /* GCC 4.8 does not calculate the control flow for setjmp correctly
|
||
|
+ (BZ 56982). This might lead to merging stack variable slots
|
||
|
+ which in fact are live at the same time. The following check
|
||
|
+ considers all variables being live across setjmp invocations
|
||
|
+ (these must be marked volatile) to conflict with all other stack
|
||
|
+ variables. */
|
||
|
+ if (cfun->calls_setjmp
|
||
|
+ && (TREE_THIS_VOLATILE (a->decl) || TREE_THIS_VOLATILE (b->decl)))
|
||
|
+ return true;
|
||
|
/* Partitions containing an SSA name result from gimple registers
|
||
|
with things like unsupported modes. They are top-level and
|
||
|
hence conflict with everything else. */
|