]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR lto/60635 (ICE when mixing C and Fortran lto1: error: use operand missing for...
authorRichard Biener <rguenther@suse.de>
Wed, 23 Apr 2014 12:45:23 +0000 (12:45 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 23 Apr 2014 12:45:23 +0000 (12:45 +0000)
2014-04-23  Richard Biener  <rguenther@suse.de>

PR middle-end/60635
* gimplify.c (gimple_regimplify_operands): Update the
re-gimplifed stmt.

* gfortran.dg/lto/pr60635_0.f90: New testcase.
* gfortran.dg/lto/pr60635_1.c: Likewise.

From-SVN: r209696

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/lto/pr60635_0.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/lto/pr60635_1.c [new file with mode: 0644]

index de4c7891344a900ecbfb5e01bd56e0d64a27cb0e..8f7d2441d06043018f5603e511925121965843c4 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60635
+       * gimplify.c (gimple_regimplify_operands): Update the
+       re-gimplifed stmt.
+
 2014-04-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        Back port from the trunk, subversion id 209546.
index a9a9229f45f2cddc280a0d74cdb404f7449eb596..52fbfc5732c3f68ed90351038a4e56a3d62e0d94 100644 (file)
@@ -8632,6 +8632,8 @@ gimple_regimplify_operands (gimple stmt, gimple_stmt_iterator *gsi_p)
     gsi_insert_after (gsi_p, post_stmt, GSI_NEW_STMT);
 
   pop_gimplify_context (NULL);
+
+  update_stmt (stmt);
 }
 
 /* Expand EXPR to list of gimple statements STMTS.  GIMPLE_TEST_F specifies
index 22f1669e92aaf2836e13a1f4ee44bb9f8a9ea895..226f7e749c604749ae667b7175d5037d6829fbfb 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-23  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/60635
+       * gfortran.dg/lto/pr60635_0.f90: New testcase.
+       * gfortran.dg/lto/pr60635_1.c: Likewise.
+
 2014-04-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        Back port from the trunk, subversion id 209546.
diff --git a/gcc/testsuite/gfortran.dg/lto/pr60635_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr60635_0.f90
new file mode 100644 (file)
index 0000000..e121879
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-lto-do link }
+program test
+  use iso_fortran_env
+
+  interface
+    integer(int16) function bigendc16(x) bind(C)
+      import
+      integer(int16), intent(in) :: x
+    end function
+  end interface
+  
+  integer(int16) :: x16 = 12345
+  x16 = bigendc16(x16)
+  print *,x16
+end program
+
diff --git a/gcc/testsuite/gfortran.dg/lto/pr60635_1.c b/gcc/testsuite/gfortran.dg/lto/pr60635_1.c
new file mode 100644 (file)
index 0000000..eddc569
--- /dev/null
@@ -0,0 +1,14 @@
+#include <stdint.h>
+#include <stdbool.h>
+
+static bool littleendian=true;
+
+uint16_t bigendc16(union{uint16_t * n;uint8_t* b;}x){
+
+    if (!littleendian) return *x.n;
+
+    uint16_t res = ((uint16_t)(x.b[1])<<0) |
+       ((uint16_t)(x.b[0])<<8);
+    return res;
+}
+