re PR ipa/92409 (r277920 causes ICE in gcc.dg/cast-function-1.c)
authorRichard Biener <rguenther@suse.de>
Fri, 8 Nov 2019 13:15:40 +0000 (13:15 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 8 Nov 2019 13:15:40 +0000 (13:15 +0000)
2019-11-08  Richard Biener  <rguenther@suse.de>

PR ipa/92409
* tree-inline.c (declare_return_variable): Properly handle
type mismatches for the return slot.

From-SVN: r277972

gcc/ChangeLog
gcc/tree-inline.c

index a2f30cf8aec38efb9bed11053e98ea8618096866..89bb204088034dce9ad65bfcd8291e613ae5a6dd 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-08  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/92409
+       * tree-inline.c (declare_return_variable): Properly handle
+       type mismatches for the return slot.
+
 2019-11-08  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR target/92095
index 9d0acd97f7729c68adbbbfeb6cced8a7a0d19866..63274f746796d26db105293d52ef8dc53280e3b0 100644 (file)
@@ -3593,7 +3593,9 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
      vs. the call expression.  */
   if (modify_dest)
     caller_type = TREE_TYPE (modify_dest);
-  else
+  else if (return_slot)
+    caller_type = TREE_TYPE (return_slot);
+  else /* No LHS on the call.  */
     caller_type = TREE_TYPE (TREE_TYPE (callee));
 
   /* We don't need to do anything for functions that don't return anything.  */
@@ -3634,6 +3636,10 @@ declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
          && !DECL_GIMPLE_REG_P (result)
          && DECL_P (var))
        DECL_GIMPLE_REG_P (var) = 0;
+
+      if (!useless_type_conversion_p (callee_type, caller_type))
+       var = build1 (VIEW_CONVERT_EXPR, callee_type, var);
+
       use = NULL;
       goto done;
     }