]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/38763 (TRANSFER ICE due to missing EXPR_NULL case)
authorPaul Thomas <pault@gcc.gnu.org>
Sat, 10 Jan 2009 00:15:37 +0000 (00:15 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sat, 10 Jan 2009 00:15:37 +0000 (00:15 +0000)
2009-01-10  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/38763
* target-memory.c (encode_derived): Encode NULL.

2009-01-10  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/38763
* gfortran.dg/transfer_null_1.f90: New test.

From-SVN: r143238

gcc/fortran/ChangeLog
gcc/fortran/target-memory.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/transfer_null_1.f90 [new file with mode: 0644]

index b7d1b99f693ad72913b5a8149fbc23504eb76ee4..b3d179910ccac2265fe62cd215b081517d9449c5 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/38763
+       * target-memory.c (encode_derived): Encode NULL.
+
 2009-01-10  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/38765
index 72bd6eff2143b9012c30fbeb231cf38a01ae2b86..dc10b53d926e7885812d3d56c59a84287954092c 100644 (file)
@@ -1,5 +1,5 @@
 /* Simulate storage of variables into target memory.
-   Copyright (C) 2007, 2008
+   Copyright (C) 2007, 2008, 2009
    Free Software Foundation, Inc.
    Contributed by Paul Thomas and Brooks Moses
 
@@ -220,8 +220,13 @@ encode_derived (gfc_expr *source, unsigned char *buffer, size_t buffer_size)
        continue;
       ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl))
            + TREE_INT_CST_LOW(DECL_FIELD_BIT_OFFSET(cmp->backend_decl))/8;
-      gfc_target_encode_expr (ctr->expr, &buffer[ptr],
-                             buffer_size - ptr);
+
+      if (ctr->expr->expr_type == EXPR_NULL)
+       memset (&buffer[ptr], 0,
+               int_size_in_bytes (TREE_TYPE (cmp->backend_decl)));
+      else
+       gfc_target_encode_expr (ctr->expr, &buffer[ptr],
+                               buffer_size - ptr);
     }
 
   return int_size_in_bytes (type);
index cadac67aa3b1ad0c38bae867ce12c8a591397e59..4765a8e8abe3a8dfb1b7883080348d0a05e61e5e 100644 (file)
@@ -1,3 +1,8 @@
+2009-01-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/38763
+       * gfortran.dg/transfer_null_1.f90: New test.
+
 2009-01-10  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/38765
diff --git a/gcc/testsuite/gfortran.dg/transfer_null_1.f90 b/gcc/testsuite/gfortran.dg/transfer_null_1.f90
new file mode 100644 (file)
index 0000000..7201a68
--- /dev/null
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! Test fix for pr38763, where NULL was not being encoded.
+!
+! Contributed by Steve Kargl <kargl@gcc.gnu.org> from a
+! posting by James van Buskirk on clf.
+!
+program sizetest
+   use ISO_C_BINDING
+   implicit none
+   integer, parameter :: ik1 = selected_int_kind(2)
+   TYPE vehicle_t1
+      INTEGER(C_INT), DIMENSION(:), ALLOCATABLE :: sensors
+   END TYPE vehicle_t1
+   type(vehicle_t1) gfortran_bug_workaround
+   integer i
+   i = size(transfer(vehicle_t1(NULL()),[0_ik1]))
+   print *, i
+   i = size(transfer(vehicle_t1([i]),[0_ik1]))
+   print *, i
+end program sizetest