Переглянути джерело

Fix interaction of profiler and ITERN recording.

Reported and analyzed by vfprintf. #754
Mike Pall 3 роки тому
батько
коміт
05f1984e1a
1 змінених файлів з 3 додано та 1 видалено
  1. 3 1
      src/lj_record.c

+ 3 - 1
src/lj_record.c

@@ -663,7 +663,9 @@ static LoopEvent rec_itern(jit_State *J, BCReg ra, BCReg rb)
 #else
   RecordIndex ix;
   /* Since ITERN is recorded at the start, we need our own loop detection. */
-  if (J->pc == J->startpc && J->cur.nins > REF_FIRST &&
+  if (J->pc == J->startpc &&
+      (J->cur.nins > REF_FIRST+1 ||
+       (J->cur.nins == REF_FIRST+1 && J->cur.ir[REF_FIRST].o != IR_PROF)) &&
       J->framedepth + J->retdepth == 0 && J->parent == 0 && J->exitno == 0) {
     lj_record_stop(J, LJ_TRLINK_LOOP, J->cur.traceno);  /* Looping trace. */
     return LOOPEV_ENTER;