Probably related to PR 18960, except that two null pointers are swapped here :-) $ cat reshape-char.f90 program main character(len=1), dimension(2,2) :: a,b a = transpose(reshape((/'a', 'b', 'c', 'd'/), shape(a))) print *,a end program main $ gfortran reshape-char.f90 reshape-char.f90: In function 'MAIN__': reshape-char.f90:3: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. $ gfortran -v Using built-in specs. Configured with: ../gcc-4.0-20050102/configure --prefix=/home/zfkts --enable-languages=c,c++,f95 Thread model: posix gcc version 4.0.0 20050102 (experimental) $ gfortran -dumpmachine ia64-unknown-linux-gnu $ gdb ~/libexec/gcc/ia64-unknown-linux-gnu/4.0.0/f951 GNU gdb Red Hat Linux (6.1post-1.20040607.52rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "ia64-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb) r reshape-char.f90 Starting program: /home/zfkts/libexec/gcc/ia64-unknown-linux-gnu/4.0.0/f951 reshape-char.f90 MAIN__ Program received signal SIGSEGV, Segmentation fault. tree_swap_operands_p (arg0=0x0, arg1=0x0, reorder=1 '\001') at ../../gcc-4.0-20050102/gcc/fold-const.c:5933 5933 STRIP_SIGN_NOPS (arg1); (gdb) bt #0 tree_swap_operands_p (arg0=0x0, arg1=0x0, reorder=1 '\001') at ../../gcc-4.0-20050102/gcc/fold-const.c:5933 #1 0x400000000041e690 in fold (expr=0x20000000024cceb0) at ../../gcc-4.0-20050102/gcc/fold-const.c:6328 #2 0x40000000000b8460 in gfc_trans_allocate_temp_array ( loop=0x60000fffffff9350, info=0x60000000000ed3b0, eltype=Variable "eltype" is not available. ) at ../../gcc-4.0-20050102/gcc/fortran/trans-array.c:621 #3 0x40000000000d9150 in gfc_conv_function_call (se=0x60000fffffff91a0, sym=0x60000000000ed510, arg=0x60000000000eb5a0) at ../../gcc-4.0-20050102/gcc/fortran/trans-expr.c:1091 #4 0x40000000000e2490 in gfc_conv_intrinsic_funcall (se=0x60000fffffff91a0, expr=0x60000000000eb330) at ../../gcc-4.0-20050102/gcc/fortran/trans-intrinsic.c:1083 #5 0x40000000000e99f0 in gfc_conv_intrinsic_function (se=0x60000fffffff91a0, expr=0x60000000000eb330) at ../../gcc-4.0-20050102/gcc/fortran/trans-intrinsic.c:3007 #6 0x40000000000d97c0 in gfc_conv_function_expr (se=0x60000fffffff91a0, expr=0x60000000000eb330) at ../../gcc-4.0-20050102/gcc/fortran/trans-expr.c:1404 #7 0x40000000000da3a0 in gfc_conv_expr (se=0x60000fffffff91a0, expr=0x60000000000eb330) at ../../gcc-4.0-20050102/gcc/fortran/trans-expr.c:1780 #8 0x40000000000c4e40 in gfc_add_loop_ss_code (loop=0x60000fffffff9350, ---Type <return> to continue, or q <return> to quit--- ss=0x60000000000ed390, subscript=0 '\0') at ../../gcc-4.0-20050102/gcc/fortran/trans-array.c:1232 #9 0x40000000000c57c0 in gfc_conv_loop_setup (loop=0x60000fffffff9350) at ../../gcc-4.0-20050102/gcc/fortran/trans-array.c:2563 #10 0x40000000000df810 in gfc_trans_assignment (expr1=0x60000000000ea360, expr2=0x60000000000eb330) at ../../gcc-4.0-20050102/gcc/fortran/trans-expr.c:2146 #11 0x40000000000dfef0 in gfc_trans_assign (code=Variable "code" is not available. ) at ../../gcc-4.0-20050102/gcc/fortran/trans-expr.c:2235 #12 0x40000000000b6310 in gfc_trans_code (code=0x60000000000ec360) at ../../gcc-4.0-20050102/gcc/fortran/trans.c:495 #13 0x40000000000d5910 in gfc_generate_function_code (ns=0x60000000000e9b70) at ../../gcc-4.0-20050102/gcc/fortran/trans-decl.c:2217 #14 0x40000000000b69b0 in gfc_generate_code (ns=0x60000000000e9b70) at ../../gcc-4.0-20050102/gcc/fortran/trans.c:679 #15 0x400000000007a9a0 in gfc_parse_file () at ../../gcc-4.0-20050102/gcc/fortran/parse.c:2628 #16 0x40000000000ae3f0 in gfc_be_parse_file (set_yydebug=-27088) at ../../gcc-4.0-20050102/gcc/fortran/f95-lang.c:266 #17 0x400000000063d9e0 in toplev_main (argc=Variable "argc" is not available. ) at ../../gcc-4.0-20050102/gcc/toplev.c:992 #18 0x4000000000106e70 in main (argc=2, argv=0x60000fffffff9ab8) at ../../gcc-4.0-20050102/gcc/main.c:35
Confirmed, related closely to PR 18960.
This looks closely related to PR 19271. PR 19276 is the meta bug for char array problems.
There seem to be two problems here. First, gfc_simplify_reshape doesn't set the result's typespec correctly (it doesn't include a character length). Second, we're passing character lengths to the transpose library function, which only wants array descriptors. I'm testing a patch for the first problem.
Subject: Bug 19269 CVSROOT: /cvs/gcc Module name: gcc Changes by: rsandifo@gcc.gnu.org 2005-09-07 07:36:12 Modified files: gcc/fortran : ChangeLog simplify.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/gfortran.fortran-torture/execute: pr19269-1.f90 Log message: PR fortran/19269 * simplify.c (gfc_simplify_transpose): Set the result's typespec from the source, not the first element of the return value. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&r1=1.536&r2=1.537 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/simplify.c.diff?cvsroot=gcc&r1=1.30&r2=1.31 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6021&r2=1.6022 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.fortran-torture/execute/pr19269-1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
It's not clear who's on the hook to the fix the transpose() call. I'll unassign myself in the meantime.
After discussion on fortran@, I'll take a look at the library thing too.
Subject: Bug 19269 CVSROOT: /cvs/gcc Module name: gcc Changes by: rsandifo@gcc.gnu.org 2005-09-13 07:15:02 Modified files: gcc/testsuite : ChangeLog libgfortran : ChangeLog gcc/fortran : ChangeLog iresolve.c trans-array.c libgfortran/intrinsics: cshift0.c eoshift0.c eoshift2.c pack_generic.c reshape_generic.c spread_generic.c transpose_generic.c unpack_generic.c libgfortran/m4 : cshift1.m4 eoshift1.m4 eoshift3.m4 libgfortran/generated: cshift1_4.c cshift1_8.c eoshift1_4.c eoshift1_8.c eoshift3_4.c eoshift3_8.c Added files: gcc/testsuite/gfortran.dg: char_associated_1.f90 char_cshift_1.f90 char_cshift_2.f90 char_eoshift_1.f90 char_eoshift_2.f90 char_eoshift_3.f90 char_eoshift_4.f90 char_pack_1.f90 char_pack_2.f90 char_reshape_1.f90 char_spread_1.f90 char_transpose_1.f90 char_unpack_1.f90 char_unpack_2.f90 Log message: gcc/fortran/ PR target/19269 * iresolve.c (gfc_resolve_cshift, gfc_resolve_eoshift) (gfc_resolve_pack, gfc_resolve_reshape, gfc_resolve_spread) (gfc_resolve_transpose, gfc_resolve_unpack): Add "_char" to the name for character-based operations. (gfc_resolve_pack): Remove ATTRIBUTE_UNUSED from array argument. (gfc_resolve_unpack): Copy the whole typespec from the vector. * trans-array.c (gfc_conv_expr_descriptor): In the EXPR_FUNCTION case, get the string length from the scalarization state. libgfortran/ PR target/19269 * intrinsics/cshift0.c (cshift0): Add an extra size argument. (cshift0_1, cshift0_2, cshift0_4, cshift0_8): Replace explicit implementations with... (DEFINE_CSHIFT): ...this new macro. Define character versions too. * intrinsics/eoshift0.c (zeros): Delete. (eoshift0): Add extra size and filler arguments. Use memset if no bound is provided. (eoshift0_1, eoshift0_2, eoshift0_4, eoshift0_8): Replace explicit implementations with... (DEFINE_EOSHIFT): ...this new macro. Define character versions too. * intrinsics/eoshift2.c (zeros): Delete. (eoshift2): Add extra size and filler arguments. Use memset if no bound is provided. (eoshift2_1, eoshift2_2, eoshift2_4, eoshift2_8): Replace explicit implementations with... (DEFINE_EOSHIFT): ...this new macro. Define character versions too. * intrinsics/pack.c (pack_internal): New static function, reusing the contents of pack and adding an extra size argument. Change "mptr" rather than "m" when calculating the array size. (pack): Redefine as a forwarder to pack_internal. (pack_s_internal): New static function, reusing the contents of pack_s and adding an extra size argument. (pack_s): Redefine as a forwarder to pack_s_internal. (pack_char, pack_s_char): New functions. * intrinsics/reshape.c (reshape_internal): New static function, reusing the contents of reshape and adding an extra size argument. (reshape): Redefine as a forwarder to reshape_internal. (reshape_char): New function. * intrinsics/spread.c (spread_internal): New static function, reusing the contents of spread and adding an extra size argument. (spread): Redefine as a forwarder to spread_internal. (spread_char): New function. * intrinsics/transpose.c (transpose_internal): New static function, reusing the contents of transpose and adding an extra size argument. (transpose): Redefine as a forwarder to transpose_internal. (transpose_char): New function. * intrinsics/unpack.c (unpack_internal): New static function, reusing the contents of unpack1 and adding extra size and fsize arguments. (unpack1): Redefine as a forwarder to unpack_internal. (unpack0): Call unpack_internal instead of unpack1. (unpack1_char, unpack0_char): New functions. * m4/cshift1.m4 (cshift1): New static function, reusing the contents of cshift1_<kind> and adding an extra size argument. (cshift1_<kind>): Redefine as a forwarder to cshift1. (cshift1_<kind>_char): New function. * m4/eoshift1.m4 (zeros): Delete. (eoshift1): New static function, reusing the contents of eoshift1_<kind> and adding extra size and filler arguments. Fix calculation of hstride. Use memset if no bound is provided. (eoshift1_<kind>): Redefine as a forwarder to eoshift1. (eoshift1_<kind>_char): New function. * m4/eoshift3.m4 (zeros): Delete. (eoshift3): New static function, reusing the contents of eoshift3_<kind> and adding extra size and filler arguments. Use memset if no bound is provided. (eoshift3_<kind>): Redefine as a forwarder to eoshift3. (eoshift3_<kind>_char): New function. * generated/cshift1_4.c, generated/cshift1_8.c, * generated/eoshift1_4.c, generated/eoshift1_8.c, * generated/eoshift3_4.c, generated/eoshift3_8.c: Regenerate. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6052&r2=1.6053 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_associated_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_cshift_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_cshift_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_eoshift_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_eoshift_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_eoshift_3.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_eoshift_4.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_pack_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_pack_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_reshape_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_spread_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_transpose_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_unpack_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/char_unpack_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/ChangeLog.diff?cvsroot=gcc&r1=1.302&r2=1.303 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&r1=1.550&r2=1.551 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/iresolve.c.diff?cvsroot=gcc&r1=1.38&r2=1.39 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-array.c.diff?cvsroot=gcc&r1=1.60&r2=1.61 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/cshift0.c.diff?cvsroot=gcc&r1=1.13&r2=1.14 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/eoshift0.c.diff?cvsroot=gcc&r1=1.16&r2=1.17 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/eoshift2.c.diff?cvsroot=gcc&r1=1.16&r2=1.17 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/pack_generic.c.diff?cvsroot=gcc&r1=1.11&r2=1.12 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/reshape_generic.c.diff?cvsroot=gcc&r1=1.10&r2=1.11 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/spread_generic.c.diff?cvsroot=gcc&r1=1.11&r2=1.12 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/transpose_generic.c.diff?cvsroot=gcc&r1=1.10&r2=1.11 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/intrinsics/unpack_generic.c.diff?cvsroot=gcc&r1=1.10&r2=1.11 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/m4/cshift1.m4.diff?cvsroot=gcc&r1=1.10&r2=1.11 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/m4/eoshift1.m4.diff?cvsroot=gcc&r1=1.13&r2=1.14 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/m4/eoshift3.m4.diff?cvsroot=gcc&r1=1.13&r2=1.14 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/cshift1_4.c.diff?cvsroot=gcc&r1=1.9&r2=1.10 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/cshift1_8.c.diff?cvsroot=gcc&r1=1.9&r2=1.10 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/eoshift1_4.c.diff?cvsroot=gcc&r1=1.12&r2=1.13 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/eoshift1_8.c.diff?cvsroot=gcc&r1=1.12&r2=1.13 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/eoshift3_4.c.diff?cvsroot=gcc&r1=1.12&r2=1.13 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/generated/eoshift3_8.c.diff?cvsroot=gcc&r1=1.12&r2=1.13
Patch committed to mainline.