https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78618
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |---
--- Comment #6 from kargl at gcc dot gnu.org ---
Janus,
I updated my source tree to r243203, which includes your change.
My source tree cuurently has no other changes. I still see an ICE.
However, an error message is printed.
troutmask:sgk[232] gfc7 -o z char_conversion.f90
char_conversion.f90:8:30:
character, parameter :: c = char(256,4) ! { dg-error "cannot be converted"
}
1
Error: Character '\u0100' in string at (1) cannot be converted into character
kind 1
f951: internal compiler error: Segmentation fault
0xbb020f crash_signal
../../gcc7/gcc/toplev.c:333
0x5f0662 gfc_is_constant_expr(gfc_expr*)
../../gcc7/gcc/fortran/expr.c:899
0x658e21 resolve_fl_procedure
../../gcc7/gcc/fortran/resolve.c:12013
0x658e21 resolve_symbol
../../gcc7/gcc/fortran/resolve.c:14721
0x67755b do_traverse_symtree
../../gcc7/gcc/fortran/symbol.c:3994
0x6523a4 resolve_types
../../gcc7/gcc/fortran/resolve.c:15948
0x656b2c gfc_resolve(gfc_namespace*)
../../gcc7/gcc/fortran/resolve.c:16061
0x645ef4 resolve_all_program_units
../../gcc7/gcc/fortran/parse.c:5977
0x645ef4 gfc_parse_file()
../../gcc7/gcc/fortran/parse.c:6224
0x68a3c2 gfc_be_parse_file
../../gcc7/gcc/fortran/f95-lang.c:202
Running f951 under gdb shows
(gdb) run char_conversion.f90
Starting program:
/mnt/sgk/work/7/libexec/gcc/x86_64-unknown-freebsd12.0/7.0.0/f951
char_conversion.f90
char_conversion.f90:8:30:
character, parameter :: c = char(256,4) ! { dg-error "cannot be converted"
}
1
Error: Character '\u0100' in string at (1) cannot be converted into character
kind 1
Program received signal SIGSEGV, Segmentation fault.
gfc_is_constant_expr (e=0x193e) at ../../gcc7/gcc/fortran/expr.c:899
899 switch (e->expr_type)
0x193e is certainly an invalid pointer.
(gdb) up
#1 0x0000000000658e22 in resolve_fl_procedure (mp_flag=0, sym=0x203636180)
at ../../gcc7/gcc/fortran/resolve.c:12013
12013 if (cl && cl->length && gfc_is_constant_expr (cl->length)
(gdb) p *sym
$1 = {name = 0x20382c9d0 "__convert_s4_s1",
(gdb) p *sym->ts.u.cl
$4 = {length = 0x193e, next = 0x0, length_from_typespec = false,
backend_decl = 0x2039d5020, passed_length = 0x0, resolved = 56844352}