https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116254
--- Comment #11 from Paul Thomas <pault at gcc dot gnu.org> --- (In reply to Richard Sandiford from comment #10) > A bit more info: valgrind succeeds for -O0. But with optimisation enabled > (-O is enough), it flags: > > ==12989== Conditional jump or move depends on uninitialised value(s) > ==12989== at 0x49B47A0: _gfortran_spread (spread_generic.c:278) > ==12989== by 0x401227: check_spread (class_transformational_2.f90:56) > ==12989== by 0x401227: MAIN__ (class_transformational_2.f90:20) > ==12989== by 0x4035C3: main (class_transformational_2.f90:24) > > It seems that the _data._desc field of the spread results are being copied > from uninitialised memory. .gimple has: > > __attribute__((fn spec (". "))) > void check_spread () > { > … > { > … > struct array02_character(kind=1) atmp.98; > struct __class_MAIN___T_2_0a ctmp.99; > … > try > { > … > ctmp.99 = b; > ctmp.99._data = atmp.98; > ctmp.99._data.span = D.3687; > ctmp.99._data.data = 0B; > ctmp.99._data.offset = 0; > _gfortran_spread (&ctmp.99._data, D.3682, D.3684, D.3686); > > where nothing has initialised atmp.98 before the copy. Hi Richard, Thanks for tracking that down. I'm on to it. Paul