https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118935
--- Comment #1 from chenglulu <chenglulu at loongson dot cn> --- Upon debugging, it was discovered that if the '-O0' option is used to compile the `find_file0` function in `libgfortran/io/unix.c`, random errors occur. However, if the `find_file0` function is compiled with the '-O1' option, no random errors arise. The erroneous code is as follows: libgfortran/io/unix.c ``` static gfc_unit * find_file0 (gfc_unit *u, FIND_FILE0_DECL) { ...... #ifdef HAVE_WORKING_STAT if (u->s != NULL) // The input I provided next was: At this point, when making the judgment, u->s is not NULL. { unix_stream *s = (unix_stream *) (u->s); if (st[0].st_dev == s->st_dev && st[0].st_ino == s->st_ino) // But here it is NULL,u->s has been modified. return u; } ``` The corresponding LoongArch assembly code here is as follows. ``` ld.d $r12,$r3,8 ld.d $r12,$r12,8 beqz $r12,.L4 // Here, $r12 is not NULL. ld.d $r12,$r3,8 ld.d $r12,$r12,8 // However, when reloaded, it has already become NULL. st.d $r12,$r3,24 ldptr.d $r12,$r3,0 ldptr.d $r13,$r12,0 ld.d $r12,$r3,24 ld.d $r12,$r12,72 ```