aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2017-05-17 20:33:20 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2017-05-17 20:33:20 +0000
commit7f72e40263afd8d3e651a1a4ec3d5da9bc8eedd7 (patch)
tree29800b9a3654c094d28b76ab48c3fe336be322ce /gcc
parent7ded3472ae5e5eec41909fcefc911e1092479f9b (diff)
downloadgcc-7f72e40263afd8d3e651a1a4ec3d5da9bc8eedd7.zip
gcc-7f72e40263afd8d3e651a1a4ec3d5da9bc8eedd7.tar.gz
gcc-7f72e40263afd8d3e651a1a4ec3d5da9bc8eedd7.tar.bz2
re PR fortran/80741 ([Regression 7/8] DTIO wrong code causes incorrect behaviour of namelist READ)
2017-05-17 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/80741 * transfer.c (finalize_transfer): Reset last_char to 'empty'. * file_pos.c (formatted_backspace): Likewise. (st_endfile): Likewise. (st_rewind): Likewise. (st_flush): Likewise. PR fortran/80741 * trans-io.c (transfer_namelist_element): Change check from NULL_TREE to null_pointer_node. From-SVN: r248170
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-io.c2
-rw-r--r--gcc/testsuite/gfortran.dg/read_4.f9035
3 files changed, 42 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e978f32..703060d 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-17 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/80741
+ * trans-io.c (transfer_namelist_element): Change check from
+ NULL_TREE to null_pointer_node.
+
2017-05-17 Fritz Reese <fritzoreese@gmail.com>
PR fortran/80668
diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c
index 1b70136..c557c11 100644
--- a/gcc/fortran/trans-io.c
+++ b/gcc/fortran/trans-io.c
@@ -1756,7 +1756,7 @@ transfer_namelist_element (stmtblock_t * block, const char * var_name,
else
tmp = build_int_cst (gfc_charlen_type_node, 0);
- if (dtio_proc == NULL_TREE)
+ if (dtio_proc == null_pointer_node)
tmp = build_call_expr_loc (input_location,
iocall[IOCALL_SET_NML_VAL], 6,
dt_parm_addr, addr_expr, string,
diff --git a/gcc/testsuite/gfortran.dg/read_4.f90 b/gcc/testsuite/gfortran.dg/read_4.f90
new file mode 100644
index 0000000..7a835b1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/read_4.f90
@@ -0,0 +1,35 @@
+! { dg-do run }
+! PR80741 wrong code causes incorrect behaviour of namelist READ
+program p
+ use, intrinsic :: iso_fortran_env, only: iostat_end
+ implicit none
+ integer :: x, y, ios, io
+ character(10) :: line
+ namelist /test/ x, y
+
+ x = 10
+ y = 10
+ ios = 0
+ io = 10
+ open(unit=io, status='scratch')
+ write(io, test)
+ write(io, *) 'done'
+ rewind(io)
+ x = 0
+ y = 0
+ read(io, test)
+ if (x.ne.10 .or. y.ne.10) call abort
+ !
+ read(io, *) line
+ if (line.ne.'done') call abort
+ !
+ read(io, *, iostat=ios) line
+ if (ios/=iostat_end) call abort
+ rewind(io)
+ x = 0
+ y = 0
+ read(io, test)
+ if (x.ne.10 .or. y.ne.10) call abort
+ read(io, *, iostat=ios) line
+ if (line.ne.'done') call abort
+end