Hi, > > FAIL: gfortran.dg/deferred_type_param_6.f90 -O1 execution test > FAIL: gfortran.dg/deferred_type_param_6.f90 -Os execution test Sorry for the breakage. This time it seems like bug in Fortran FE which was previously latent:
__attribute__((fn spec (". . R "))) void subfunc (character(kind=1)[1:..__result] * & __result, integer(kind=8) * .__result) { # PT = nonlocal character(kind=1)[1:..__result] * & __result_3(D) = __result; # PT = nonlocal null integer(kind=8) * .__result_5(D) = .__result; integer(kind=4) _1; <bb 2> [local count: 1073741824]: *__result_3(D) = &fifec; # USE = nonlocal escaped { D.4230 } (nonlocal, escaped) _1 = _gfortran_compare_string (5, &fifec, 5, &"FIVEC"[1]{lb: 1 sz: 1}); if (_1 != 0) goto <bb 3>; [0.04%] else goto <bb 4>; [99.96%] <bb 3> [local count: 429496]: # USE = nonlocal escaped null # CLB = nonlocal escaped null _gfortran_stop_numeric (10, 0); <bb 4> [local count: 1073312329]: *.__result_5(D) = 5; return; } The fnspec ". . R " specifies that .__result is readonly however we have: *.__result_5(D) = 5; I am not sure I understand fortran FE well enough to figure out why it is set so. The function is declared as: function subfunc() result(res) character(len=:), pointer :: res res => fifec if (len(res) /= 5) STOP 9 if (res /= "FIVEC") STOP 10 end function subfunc and we indeed optimize load of the result: - # USE = nonlocal escaped { D.4252 D.4254 } (nonlocal, escaped) - # CLB = nonlocal escaped { D.4254 } (escaped) + # USE = nonlocal escaped + # CLB = { D.4254 } subfunc (&pstr.5, &slen.4); - .s2_34 = slen.4; - # PT = nonlocal escaped null { D.4254 } (escaped) - s2_35 = pstr.5; pstr.5 ={v} {CLOBBER}; and I think tat is what breaks the testcase (I also verified that ignoring the fnspec 'R' fixes it). Honza > > with GCC configured with > > ../../gcc/configure > --prefix=/local/skpandey/gccwork/toolwork/gcc-bisect-master/master/r12-4457/usr > --enable-clocale=gnu --with-system-zlib --with-demangler-in-ld > --with-fpmath=sse --enable-languages=c,c++,fortran --enable-cet --without-isl > --enable-libmpx x86_64-linux --disable-bootstrap > > To reproduce: > > $ cd {build_dir}/gcc && make check > RUNTESTFLAGS="dg.exp=gfortran.dg/deferred_type_param_6.f90 > --target_board='unix{-m32}'" > $ cd {build_dir}/gcc && make check > RUNTESTFLAGS="dg.exp=gfortran.dg/deferred_type_param_6.f90 > --target_board='unix{-m32\ -march=cascadelake}'" > $ cd {build_dir}/gcc && make check > RUNTESTFLAGS="dg.exp=gfortran.dg/deferred_type_param_6.f90 > --target_board='unix{-m64}'" > $ cd {build_dir}/gcc && make check > RUNTESTFLAGS="dg.exp=gfortran.dg/deferred_type_param_6.f90 > --target_board='unix{-m64\ -march=cascadelake}'" > > (Please do not reply to this email, for question about this report, contact > me at skpgkp2 at gmail dot com)