+2017-10-16 Fritz Reese <fritzoreese@gmail.com>
+
+ PR fortran/82511
+ * trans-io.c (transfer_expr): Treat BT_UNION as BT_DERIVED.
+
2017-10-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82372
case BT_CLASS:
if (ts->u.derived->components == NULL)
return;
- if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
+ if (gfc_bt_struct (ts->type) || ts->type == BT_CLASS)
{
gfc_symbol *derived;
gfc_symbol *dtio_sub = NULL;
function = iocall[IOCALL_X_DERIVED];
break;
}
- else if (ts->type == BT_DERIVED)
+ else if (gfc_bt_struct (ts->type))
{
/* Recurse into the elements of the derived type. */
expr = gfc_evaluate_now (addr_expr, &se->pre);
+2017-10-16 Fritz Reese <fritzoreese@gmail.com>
+
+ PR fortran/82511
+ * gfortran.dg/dec_structure_22.f90: New testcase.
+
2017-10-16 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/64931
--- /dev/null
+ ! { dg-do run }
+ ! { dg-options "-fdec-structure" }
+ !
+ ! PR fortran/82511
+ !
+ ! Verify that structure variables with UNION components
+ ! are accepted in an I/O-list READ.
+ !
+ implicit none
+
+ structure /s/
+ union
+ map
+ character(16) :: c16_1
+ end map
+ map
+ character(16) :: c16_2
+ end map
+ end union
+ end structure
+
+ record /s/ r
+ character(32) :: instr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^"
+
+ r.c16_1 = ' '
+ r.c16_2 = ' '
+ ! The record r shall be treated as if its components are listed:
+ ! read(...) r.c16_1, r.c16_2
+ ! This shall correspond to the formatted read of A16,A16
+ read(instr, '(A16,A16)') r
+
+ ! r.c16_1 and r.c16_2 are in a union, thus share the same memory
+ ! and the first 16 bytes of instr are overwritten
+ if ( r.c16_1 .ne. instr(17:32) .or. r.c16_2 .ne. instr(17:32) ) then
+ call abort()
+ endif
+
+ end