re PR fortran/32938 (ICE in emit_move_insn with -fdefault-integer-8)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 31 Jul 2007 21:15:45 +0000 (21:15 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 31 Jul 2007 21:15:45 +0000 (21:15 +0000)
PR fortran/32938
* trans-stmt.c (gfc_trans_return): Convert to correct type.
* gfortran.dg/altreturn_6.f90: New test.

From-SVN: r127106

gcc/fortran/ChangeLog
gcc/fortran/trans-stmt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/altreturn_6.f90 [new file with mode: 0644]

index ce3e62cac8e6e9b757d93d1e4ccb1aa87a0c5fde..d7de098028c46bf87f081b694ce8f6e751c4253e 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-31  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/32938
+       * trans-stmt.c (gfc_trans_return): Convert to correct type.
+
 2007-07-31  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/32942
index 0ec1435dad410d4c0a06866449be388d79ece642..e731967bbb2e6eb7480b05b4992a9286bef885ac 100644 (file)
@@ -447,7 +447,8 @@ gfc_trans_return (gfc_code * code ATTRIBUTE_UNUSED)
 
       gfc_conv_expr (&se, code->expr);
 
-      tmp = build2 (MODIFY_EXPR, TREE_TYPE (result), result, se.expr);
+      tmp = build2 (MODIFY_EXPR, TREE_TYPE (result), result,
+                   fold_convert (TREE_TYPE (result), se.expr));
       gfc_add_expr_to_block (&se.pre, tmp);
 
       tmp = build1_v (GOTO_EXPR, gfc_get_return_label ());
index 4990638e685ca78ec5ae52821a71920b416e3763..1c05bf0ec994fe19175211289dded2fcc89a1160 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-31  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/32938
+       * gfortran.dg/altreturn_6.f90: New test.
+
 2007-07-31  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/32942
diff --git a/gcc/testsuite/gfortran.dg/altreturn_6.f90 b/gcc/testsuite/gfortran.dg/altreturn_6.f90
new file mode 100644 (file)
index 0000000..61f5f60
--- /dev/null
@@ -0,0 +1,5 @@
+! PR 32938
+subroutine r (*)
+  integer(kind=8) :: i
+  return i
+end