Blame SOURCES/gcc48-rh1655148.patch

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