re PR middle-end/68291 (ICE in emit_move_insn, at expr.c:3540)
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 8 Dec 2015 18:47:54 +0000 (18:47 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 8 Dec 2015 18:47:54 +0000 (18:47 +0000)
PR middle-end/68291
PR middle-end/68292
* cfgexpand.c (set_rtl): Always accept mode mismatch for SSA names
with BLKmode promoted mode based on RESULT_DECLs.

From-SVN: r231422

gcc/ChangeLog
gcc/cfgexpand.c

index ed8dd112cdc267e19712ea148a148f04f30e466d..e186901b00857fd65e49b6dc7552b21fc917dd4e 100644 (file)
@@ -1,3 +1,10 @@
+2015-12-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR middle-end/68291
+       PR middle-end/68292
+       * cfgexpand.c (set_rtl): Always accept mode mismatch for SSA names
+       with BLKmode promoted mode based on RESULT_DECLs.
+
 2015-12-08  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/68701
index 5338c251b461d1c8bd8961fc991b8d599ac56fb9..7fe02a900bc987fb8525febe4fb04aba3c58b830 100644 (file)
@@ -203,11 +203,14 @@ set_rtl (tree t, rtx x)
      PARM_DECLs and RESULT_DECLs, we'll have been called by
      set_parm_rtl, which will give us the default def, so we don't
      have to compute it ourselves.  For RESULT_DECLs, we accept mode
-     mismatches too, as long as we're not coalescing across variables,
-     so that we don't reject BLKmode PARALLELs or unpromoted REGs.  */
+     mismatches too, as long as we have BLKmode or are not coalescing
+     across variables, so that we don't reject BLKmode PARALLELs or
+     unpromoted REGs.  */
   gcc_checking_assert (!x || x == pc_rtx || TREE_CODE (t) != SSA_NAME
-                      || (SSAVAR (t) && TREE_CODE (SSAVAR (t)) == RESULT_DECL
-                          && !flag_tree_coalesce_vars)
+                      || (SSAVAR (t)
+                          && TREE_CODE (SSAVAR (t)) == RESULT_DECL
+                          && (promote_ssa_mode (t, NULL) == BLKmode
+                              || !flag_tree_coalesce_vars))
                       || !use_register_for_decl (t)
                       || GET_MODE (x) == promote_ssa_mode (t, NULL));