https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84848
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |burnus at gcc dot gnu.org, | |jakub at gcc dot gnu.org, | |vehre at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This sounds like UB (use of uninitialized var), though I know next to nothing about type(event_type), but looking around I see various examples in Fortran pdfs that use type(event_type) and never initialize it in any special way. So, based on that the bug is likely in the -fcoarray=single support of event_type that we fail to zero initialize the vars we create for it, or, if some initialization is required from users, in the testcase. In any case, on x86_64-linux with -fcoarray=single I see in the *.original dump: exchange () { integer(kind=4) cnt; (integer(kind=4)) x = (integer(kind=4)) x + 1; (integer(kind=4)) x = (integer(kind=4)) x + 1; cnt = (integer(kind=4)) x; if (cnt != 2) { _gfortran_error_stop_numeric (1, 0); } L.1:; (integer(kind=4)) x = (integer(kind=4)) x + -2; } (this is fine, it only uses the x from the parent function) and global_event () { static void exchange (void); integer(kind=4) x; exchange (); } As x is automatic variable and is not initialized, the x++ statements invoke (from middle-end POV) UB by incrementing uninitialized variable.