Bug 18781 - [ICE] WRITE with FMT from CHARACTER array
[ICE] WRITE with FMT from CHARACTER array
Status: RESOLVED FIXED
Product: gcc
Classification: Unclassified
Component: fortran
4.0.0
: P2 normal
: 4.0.2
Assigned To: Not yet assigned to anyone
: ice-on-valid-code
Depends on:
Blocks: 19276 18834 19292
  Show dependency treegraph
 
Reported: 2004-12-02 12:03 UTC by Francois-Xavier Coudert
Modified: 2005-07-12 04:26 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-03-17 02:16:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Francois-Xavier Coudert 2004-12-02 12:03:13 UTC
Hi,

working along the non-resolved NIST test failures, here is the reduced test case
for FM711:

----------------------------------
      PROGRAM FM711
      IMPLICIT NONE
      CHARACTER C1N002(4)*5
      DATA C1N002 / '(10HI', '/O TE', 'ST: ,', ' A10)' /
      WRITE (*, FMT=C1N002) 1
      STOP
      END
----------------------------------

With gcc version 4.0.0 20041202, compilation exits on an ICE:

$ gfortran foo.f -c
foo.f: In function ‘MAIN__’:
foo.f:5: internal compiler error: Segmentation fault
Comment 1 Andrew Pinski 2004-12-02 13:27:17 UTC
Confirmed, here is the backtrace:
#0  0x00051910 in gfc_conv_scalarized_array_ref (se=0xbffff7c8, ar=0x42104294) at /Users/pinskia/
src/local/gcc/gcc/fortran/trans-array.c:1617
#1  0x000519bc in gfc_conv_array_ref (se=0xbffff7c8, ar=0x42104294) at /Users/pinskia/src/local/
gcc/gcc/fortran/trans-array.c:1661
#2  0x000519bc in gfc_conv_array_ref (se=0xbffff250, ar=0x24004242) at /Users/pinskia/src/local/
gcc/gcc/fortran/trans-array.c:1661
#3  0x0005f92c in gfc_conv_expr (se=0xbffff7c8, expr=0x42104170) at /Users/pinskia/src/local/gcc/
gcc/fortran/trans-expr.c:376
#4  0x00068a7c in set_string (block=0xbffff858, postblock=0xbffff860, var=0x42641780, 
var_len=0x42641800, e=0x42104170) at /Users/pinskia/src/local/gcc/gcc/fortran/trans-io.c:402
#5  0x00069bdc in build_dt (function=0x5ac374, code=0x5ac388) at /Users/pinskia/src/local/gcc/
gcc/fortran/trans-io.c:981
#6  0x0004f6dc in gfc_trans_code (code=0x421043a0) at /Users/pinskia/src/local/gcc/gcc/fortran/
trans.c:591
#7  0x0005d400 in gfc_generate_function_code (ns=0x42807600) at /Users/pinskia/src/local/gcc/
gcc/fortran/trans-decl.c:2217
#8  0x0004f844 in gfc_generate_code (ns=0x42807600) at /Users/pinskia/src/local/gcc/gcc/fortran/
trans.c:679
#9  0x00035b5c in gfc_parse_file () at /Users/pinskia/src/local/gcc/gcc/fortran/parse.c:2628
#10 0x0004c470 in gfc_be_parse_file (set_yydebug=-1073743928) at /Users/pinskia/src/local/gcc/
gcc/fortran/f95-lang.c:266
#11 0x00339354 in toplev_main (argc=1115715072, argv=0x42104700) at /Users/pinskia/src/local/
gcc/gcc/toplev.c:992

Related to PR 15966.
Comment 2 Tobias Schlüter 2004-12-02 20:33:33 UTC
The testcase also segfaults with the DATA line removed.
Comment 3 Andrew Pinski 2005-05-05 23:26:15 UTC

*** This bug has been marked as a duplicate of 15966 ***
Comment 4 CVS Commits 2005-07-07 07:55:42 UTC
Subject: Bug 18781

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	fengwang@gcc.gnu.org	2005-07-07 07:55:00

Modified files:
	libgfortran    : ChangeLog 
	gcc/fortran    : ChangeLog arith.c expr.c intrinsic.c io.c 
	                 misc.c primary.c simplify.c trans-const.c 
	                 trans-io.c arith.h gfortran.h 
	gcc/testsuite  : ChangeLog 
	libgfortran/io : transfer.c 
Added files:
	gcc/testsuite/gfortran.dg: hollerith.f90 hollerith2.f90 
	                           hollerith3.f90 hollerith4.f90 
	                           hollerith_f95.f90 
	                           hollerith_legacy.f90 
	gcc/testsuite/gfortran.dg/g77: cpp4.F 

Log message:
	For the 60th anniversary of Chinese people¡¯s Anti-Japan war victory.
	
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	
	PR fortran/16531
	PR fortran/15966
	PR fortran/18781
	* arith.c (gfc_hollerith2int, gfc_hollerith2real,
	gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical):
	New functions.
	(eval_intrinsic): Don't evaluate if Hollerith constant arguments exist.
	* arith.h (gfc_hollerith2int, gfc_hollerith2real,
	gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical):
	Add prototypes.
	* expr.c (free_expr0): Free memery allocated for Hollerith constant.
	(gfc_copy_expr): Allocate and copy string if Expr is from Hollerith.
	(gfc_check_assign): Enable conversion from Hollerith to other.
	* gfortran.h (bt): Add BT_HOLLERITH.
	(gfc_expr): Add from_H flag.
	* intrinsic.c (gfc_type_letter): Return 'h' for BT_HOLLERITH.
	(add_conversions): Add conversions from Hollerith constant to other.
	(do_simplify): Don't simplify if  Hollerith constant arguments exist.
	* io.c (resolve_tag): Enable array in FORMAT tag under GFC_STD_GNU.
	* misc.c (gfc_basetype_name): Return "HOLLERITH" for BT_HOLLERITH.
	(gfc_type_name): Print "HOLLERITH" for BT_HOLLERITH.
	* primary.c (match_hollerith_constant): New function.
	(gfc_match_literal_constant): Add match Hollerith before Integer.
	* simplify.c (gfc_convert_constant): Add conversion from Hollerith
	to other.
	* trans-const.c (gfc_conv_constant_to_tree): Use VIEW_CONVERT_EXPR to
	convert Hollerith constant to tree.
	* trans-io.c (gfc_convert_array_to_string): Get array's address and
	length to set string expr.
	(set_string): Deal with array assigned Hollerith constant and character
	array.
	* gfortran.texi: Document Hollerith constants as extention support.
	
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	
	PR fortran/16531
	PR fortran/15966
	PR fortran/18781
	* gfortran.dg/hollerith.f90: New.
	* gfortran.dg/hollerith2.f90: New.
	* gfortran.dg/hollerith3.f90: New.
	* gfortran.dg/hollerith4.f90: New.
	* gfortran.dg/hollerith_f95.f90: New.
	* gfortran.dg/hollerith_legacy.f90: New.
	* gfortran.dg/g77/cpp4.F: New. Port from g77.
	
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	
	PR fortran/16531
	* io/transfer.c (formatted_transfer): Enable FMT_A on other types to
	support Hollerith constants.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/ChangeLog.diff?cvsroot=gcc&r1=1.255&r2=1.256
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&r1=1.485&r2=1.486
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/arith.c.diff?cvsroot=gcc&r1=1.29&r2=1.30
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/expr.c.diff?cvsroot=gcc&r1=1.26&r2=1.27
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/intrinsic.c.diff?cvsroot=gcc&r1=1.51&r2=1.52
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/io.c.diff?cvsroot=gcc&r1=1.27&r2=1.28
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/misc.c.diff?cvsroot=gcc&r1=1.9&r2=1.10
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/primary.c.diff?cvsroot=gcc&r1=1.28&r2=1.29
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/simplify.c.diff?cvsroot=gcc&r1=1.29&r2=1.30
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-const.c.diff?cvsroot=gcc&r1=1.28&r2=1.29
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-io.c.diff?cvsroot=gcc&r1=1.37&r2=1.38
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/arith.h.diff?cvsroot=gcc&r1=1.6&r2=1.7
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/gfortran.h.diff?cvsroot=gcc&r1=1.74&r2=1.75
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.5732&r2=1.5733
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/transfer.c.diff?cvsroot=gcc&r1=1.46&r2=1.47
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith3.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith4.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith_f95.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith_legacy.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/g77/cpp4.F.diff?cvsroot=gcc&r1=NONE&r2=1.1

Comment 5 Tobias Schlüter 2005-07-09 12:14:40 UTC
This is not a dup of PR15966, and I don't think it's dependent on it either. 
While 15966 is about internal files which are arrays, this is about formats
which are arrays. 
Comment 6 CVS Commits 2005-07-12 01:51:04 UTC
Subject: Bug 18781

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-4_0-branch
Changes by:	fengwang@gcc.gnu.org	2005-07-12 01:50:48

Modified files:
	libgfortran    : ChangeLog 
	libgfortran/intrinsics: etime.c getcwd.c stat.c unlink.c 
	libgfortran/io : transfer.c unit.c 
	libgfortran/runtime: string.c 
	gcc/testsuite  : ChangeLog 
	gcc/fortran    : ChangeLog arith.c arith.h expr.c gfortran.h 
	                 gfortran.texi intrinsic.c io.c misc.c primary.c 
	                 simplify.c trans-const.c trans-io.c 
Added files:
	gcc/testsuite/gfortran.dg: hollerith.f90 hollerith2.f90 
	                           hollerith3.f90 hollerith4.f90 
	                           hollerith_f95.f90 
	                           hollerith_legacy.f90 
	gcc/testsuite/gfortran.dg/g77: cpp4.F 

Log message:
	2005-07-12  Feng Wang  <fengwang@nudt.edu.cn>
	
	Backport from the mainline:
	2005-03-05  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
	* trans-const.c (gfc_conv_constant_to_tree): Use correct tree
	type for COMPLEX constants.
	
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	PR fortran/16531
	PR fortran/15966
	PR fortran/18781
	* arith.c (gfc_hollerith2int, gfc_hollerith2real,
	gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical):
	New functions.
	(eval_intrinsic): Don't evaluate if Hollerith constant arguments exist.
	* arith.h (gfc_hollerith2int, gfc_hollerith2real,
	gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical):
	Add prototypes.
	* expr.c (free_expr0): Free memery allocated for Hollerith constant.
	(gfc_copy_expr): Allocate and copy string if Expr is from Hollerith.
	(gfc_check_assign): Enable conversion from Hollerith to other.
	* gfortran.h (bt): Add BT_HOLLERITH.
	(gfc_expr): Add from_H flag.
	* intrinsic.c (gfc_type_letter): Return 'h' for BT_HOLLERITH.
	(add_conversions): Add conversions from Hollerith constant to other.
	(do_simplify): Don't simplify if  Hollerith constant arguments exist.
	* io.c (resolve_tag): Enable array in FORMAT tag under GFC_STD_GNU.
	* misc.c (gfc_basetype_name): Return "HOLLERITH" for BT_HOLLERITH.
	(gfc_type_name): Print "HOLLERITH" for BT_HOLLERITH.
	* primary.c (match_hollerith_constant): New function.
	(gfc_match_literal_constant): Add match Hollerith before Integer.
	* simplify.c (gfc_convert_constant): Add conversion from Hollerith
	to other.
	* trans-const.c (gfc_conv_constant_to_tree): Use VIEW_CONVERT_EXPR to
	convert Hollerith constant to tree.
	* trans-io.c (gfc_convert_array_to_string): Get array's address and
	length to set string expr.
	(set_string): Deal with array assigned Hollerith constant and character
	array.
	* gfortran.texi: Document Hollerith constants as extention support.
	
	2005-07-12  Feng Wang  <fengwang@nudt.edu.cn>
	
	Backport from the mainline:
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	PR fortran/16531
	PR fortran/15966
	PR fortran/18781
	* gfortran.dg/hollerith.f90: New.
	* gfortran.dg/hollerith2.f90: New.
	* gfortran.dg/hollerith3.f90: New.
	* gfortran.dg/hollerith4.f90: New.
	* gfortran.dg/hollerith_f95.f90: New.
	* gfortran.dg/hollerith_legacy.f90: New.
	* gfortran.dg/g77/cpp4.F: New. Port from g77.
	
	2005-07-12  Feng Wang  <fengwang@nudt.edu.cn>
	
	* runtime/string.c (compare0): Remove unused variable.
	* intrinsics/etime.c (etime_sub): Ditto.
	* intrinsics/getcwd.c (getcwd_i4_sub): Ditto.
	* intrinsics/stat.c (stat_i4_sub stat_i8_sub fstat_i4_sub
	fstat_i8_sub): Ditto.
	* intrinsics/unlink.c (unlink_i4_sub): Ditto.
	* io/unit.c (init_units): Ditto.
	
	Backport from mainline.
	2005-07-07  Feng Wang  <fengwang@nudt.edu.cn>
	PR fortran/16531
	* io/transfer.c (formatted_transfer): Enable FMT_A on other types to
	support Hollerith constants.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith2.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith3.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith4.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith_f95.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/hollerith_legacy.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/g77/cpp4.F.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.163.2.58&r2=1.163.2.59
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/etime.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5&r2=1.5.12.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/getcwd.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.3&r2=1.3.12.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/stat.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4.14.1&r2=1.4.14.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/unlink.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4&r2=1.4.12.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/transfer.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.32.2.7&r2=1.32.2.8
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/unit.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.8.10.1&r2=1.8.10.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/runtime/string.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4.12.1&r2=1.4.12.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.267&r2=1.5084.2.268
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.335.2.86&r2=1.335.2.87
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/arith.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.22.2.2&r2=1.22.2.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/arith.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4.36.1&r2=1.4.36.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/expr.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.23.2.2&r2=1.23.2.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/gfortran.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.58.2.9&r2=1.58.2.10
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/gfortran.texi.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.10.8.5&r2=1.10.8.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/intrinsic.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.44.2.5&r2=1.44.2.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/io.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.19.10.5&r2=1.19.10.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/misc.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.8&r2=1.8.10.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/primary.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.22.2.6&r2=1.22.2.7
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/simplify.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.19.2.4&r2=1.19.2.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-const.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.21.10.1&r2=1.21.10.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-io.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.33.2.3&r2=1.33.2.4

Comment 7 Andrew Pinski 2005-07-12 04:26:21 UTC
Fixed in 4.0.2 and above.