diff --git a/util/ego/cf/cf.c b/util/ego/cf/cf.c index b1cd2754c..fe4be6138 100644 --- a/util/ego/cf/cf.c +++ b/util/ego/cf/cf.c @@ -23,6 +23,7 @@ #include "../../../h/em_pseu.h" #include "../../../h/em_spec.h" #include "../../../h/em_flag.h" +#include "../../../h/em_mes.h" #include "../share/def.h" #include "cf.h" #include "cf_succ.h" @@ -303,6 +304,17 @@ STATIC interproc_analysis(p) case op_lxa: curproc->p_flags1 |= PF_ENVIRON; break; + case op_lor: + case op_str: + if (SHORT(lnp) == 0) { + curproc->p_flags1 |= PF_ENVIRON; + } + break; + case ps_mes: + if (aoff(ARG(lnp),0) == ms_gto) { + ENTERED_WITH_GTO(curproc); + } + break; } } } diff --git a/util/ego/cf/cf_succ.c b/util/ego/cf/cf_succ.c index ac71e5f7b..21176c487 100644 --- a/util/ego/cf/cf_succ.c +++ b/util/ego/cf/cf_succ.c @@ -236,7 +236,9 @@ control_flow(head) } else { if (!IS_RETURN(instr)) { if (IS_UNCOND_JUMP(instr)) { - succeeds(TARGET(lnp),b); + if (instr != op_gto) { + succeeds(TARGET(lnp),b); + } } else { if (IS_COND_JUMP(instr)) { succeeds(TARGET(lnp),b);