GithubHelp home page GithubHelp logo

Comments (4)

Araq avatar Araq commented on June 11, 2024 2

Nim's model does not allow for self-pointing objects:

  # Always point to my own 'n' field
  dest.p = dest.n.addr

This is not supported. I am not sure what it would take to support it.

from nim.

juancarlospaco avatar juancarlospaco commented on June 11, 2024 1

!nim c

type
  Obj = object
    n: int
    p: ptr int

proc `$`*(p: pointer): string =
  $cast[uint](p)

proc `$`*[T](p: ptr T): string =
  $cast[uint](p)

proc `=sink`*(dest: var Obj; source: Obj) =
  echo "sink"
  dest.n = source.n
  dest.p = dest.n.addr

proc `=dup`*(a: Obj): Obj {.nodestroy.} =
  echo "dup"
  
var oldV = Obj(n: 1)
 
proc decodeN(newV: sink Obj) =
  echo "new p: ", cast[uint](newV.p)
  echo "old value: ", oldV
  echo "new value: ", newV
  doAssert newV.p == newV.n.addr

oldV.p = oldV.n.addr
echo "old p: ", cast[uint](oldV.p)
decodeN(move oldV)

from nim.

github-actions avatar github-actions commented on June 11, 2024
🐧 Linux bisect by @juancarlospaco (collaborator)
devel 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-#devel/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-#devel/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 99.65 Kb (102,040 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u37)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4555)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u235)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u207)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u204)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u36;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4339;
extern NIM_THREADVAR TFrame* framePtr__system_u2654;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4339);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2654 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2654).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2654;
 framePtr__system_u2654 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4555();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2654 = (*framePtr__system_u2654).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u148)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u207)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u37)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u95(oldV__temp_u36);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u95(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u235(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u207((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u204)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u36), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u36.n = ((NI)1);
 oldV__temp_u36.p = (&oldV__temp_u36.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u36.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u36;
 eqwasMoved___temp_u204((&oldV__temp_u36));
 decodeN__temp_u37(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u207((&oldV__temp_u36));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:06
  • Finished 2024-05-08T11:13:06
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
stable 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 97.67 Kb (100,016 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u78)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u17;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4403);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4621();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u133)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u78(oldV__temp_u17);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u78(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u192((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u17.n = ((NI)1);
 oldV__temp_u17.p = (&oldV__temp_u17.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u17.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u17;
 eqwasMoved___temp_u189((&oldV__temp_u17));
 decodeN__temp_u18(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u192((&oldV__temp_u17));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:07
  • Finished 2024-05-08T11:13:07
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
2.0.2 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 97.68 Kb (100,024 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
 FR_.line = n;
#define nimlf_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
 NI n;
 NI* p;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__Re75IspeoxXy2oCZHwcRrA[2];
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___systemZdollars_u14)(NU64 x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u78)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 7 | NIM_STRLIT_FLAG, "old p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[7+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 7 | NIM_STRLIT_FLAG, "new p: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {7, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 11 | NIM_STRLIT_FLAG, "old value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[11+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 11 | NIM_STRLIT_FLAG, "new value: " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {11, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[66+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_10 = { 66 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(20, 3) `newV.p == newV.n.addr` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_11 = {66, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_10};
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_u17;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u4403);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4621();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u133)(NI* p_p0) {
 NimStringV2 result;
NIM_BOOL* nimErr_;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 result = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (p_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u192)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_u18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV_p0) {
 NimStringV2 colontmpD_;
 NimStringV2 colontmpD__2;
 NimStringV2 colontmpD__3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
NIM_BOOL* nimErr_;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 colontmpD__2.len = 0; colontmpD__2.p = NIM_NIL;
 colontmpD__3.len = 0; colontmpD__3.p = NIM_NIL;
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (newV_p0.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_7;
 colontmpD__2 = dollar___temp_u78(oldV__temp_u17);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T3_[1] = colontmpD__2;
 echoBinSafe(T3_, 2);
 T4_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_9;
 colontmpD__3 = dollar___temp_u78(newV_p0);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T4_[1] = colontmpD__3;
 echoBinSafe(T4_, 2);
 {
  if (!!((newV_p0.p == (&newV_p0.n)))) goto LA7_;
  failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_11);
  if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 }
LA7_: ;
 {
  LA1_:;
 }
 {
  eqdestroy___temp_u192((&newV_p0));
  if (colontmpD__3.p && !(colontmpD__3.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__3.p);
}
  if (colontmpD__2.p && !(colontmpD__2.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD__2.p);
}
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqwasMoved___temp_u189)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest_p0) {
 (*dest_p0).n = 0;
 (*dest_p0).p = 0;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 NimStringV2 colontmpD_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T3_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 nimZeroMem((void*)(&oldV__temp_u17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_u17.n = ((NI)1);
 oldV__temp_u17.p = (&oldV__temp_u17.n);
 T2_[0] = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 colontmpD_ = dollar___systemZdollars_u14(((NU64) (((NU) (ptrdiff_t) (oldV__temp_u17.p)))));
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 T2_[1] = colontmpD_;
 echoBinSafe(T2_, 2);
 T3_ = oldV__temp_u17;
 eqwasMoved___temp_u189((&oldV__temp_u17));
 decodeN__temp_u18(T3_);
 if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
 {
  LA1_:;
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 eqdestroy___temp_u192((&oldV__temp_u17));
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:10
  • Finished 2024-05-08T11:13:11
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.6.14 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '
fatal.nim(54)            sysFatal
Error: unhandled exception: options.nim(645, 14) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 105.37 Kb (107,896 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.h>
#  define nimfr_(proc, file) \
 TFrame FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#  define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#  define nimln_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog tyObject_Obj__3QyuY1yTGznZdLpU6vgCog;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__SeNI9cjAwgnSTUG8yHFeMew tySequence__SeNI9cjAwgnSTUG8yHFeMew;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw;
struct tyObject_Obj__3QyuY1yTGznZdLpU6vgCog {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[2];
typedef NU8 tyEnum_TNimKind__3rC59cFdCULJbp2tHLSZMXQ;
typedef NU8 tySet_tyEnum_TNimTypeFlag__z9aX9aBGjlpDIC58y9bKcsmzA;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__3rC59cFdCULJbp2tHLSZMXQ kind;
tySet_tyEnum_TNimTypeFlag__z9aX9aBGjlpDIC58y9bKcsmzA flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__SeNI9cjAwgnSTUG8yHFeMew* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__SeNI9cjAwgnSTUG8yHFeMew {
TGenericSeq Sup;
tyObject_StackTraceEntry__HK6FWWCL5W1d6sCawft2nw data[SEQ_DECL_SIZE];
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___systemZdollars_9)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_24)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___temp_77)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog x);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_2997)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__systemZassertions_56)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr` ", 67);
N_LIB_PRIVATE tyObject_Obj__3QyuY1yTGznZdLpU6vgCog oldV__temp_17;
extern TSafePoint* excHandler__system_2565;
extern TSafePoint* excHandler__system_2565;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TSafePoint* excHandler__system_2565;
extern TSafePoint* excHandler__system_2565;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__systemZmemory_7(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__system_2565;
 excHandler__system_2565 = s;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_2564 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_2564).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_2564;
 framePtr__system_2564 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_2997();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_2564 = (*framePtr__system_2564).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___temp_125)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = NIM_NIL;
 result = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__system_2565 = (*excHandler__system_2565).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__system_2564;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__system_2564 = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_18)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__temp_24)(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
 T1_[1] = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
 echoBinSafe(T1_, 2);
 nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
 T2_[1] = dollar___temp_77(oldV__temp_17);
 echoBinSafe(T2_, 2);
 nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T3_[1] = dollar___temp_77(newV);
 echoBinSafe(T3_, 2);
 {
  if (!!((newV.p == (&newV.n)))) goto LA6_;
  failedAssertImpl__systemZassertions_56(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
 }
 LA6_: ;
 popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___temp_18((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
 N_LIB_PRIVATE int cmdCount;
 N_LIB_PRIVATE char** cmdLine;
 N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__3QyuY1yTGznZdLpU6vgCog T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&oldV__temp_17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 oldV__temp_17.n = ((NI) 1);
 oldV__temp_17.p = (&oldV__temp_17.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___systemZdollars_9(((NU64) (((NU) (ptrdiff_t) (oldV__temp_17.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__temp_17;
 nimZeroMem((void*)(&oldV__temp_17), sizeof(tyObject_Obj__3QyuY1yTGznZdLpU6vgCog));
 decodeN__temp_24(T2_);
 eqdestroy___temp_18((&oldV__temp_17));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:14
  • Finished 2024-05-08T11:13:14
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.4.8 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.87 Kb (100,216 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.h>
#  define nimfr_(proc, file) \
 TFrame FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#  define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#  define nimln_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[2];
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___M2d4UEGH9cZOvte6rEhvUTQ)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
N_LIB_PRIVATE tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
 tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
 T1_[1] = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
 echoBinSafe(T1_, 2);
 nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
 T2_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
 echoBinSafe(T2_, 2);
 nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(newV);
 echoBinSafe(T3_, 2);
 {
  if (!!((newV.p == (&newV.n)))) goto LA6_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
 }
 LA6_: ;
 popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 oldV__AFz13lOl6ux2K6DQb2fYAQ.n = ((NI) 1);
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___M2d4UEGH9cZOvte6rEhvUTQ(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T2_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:17
  • Finished 2024-05-08T11:13:17
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.2.18 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.91 Kb (100,256 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.h>
#include <setjmp.h>
#  define nimfr_(proc, file) \
 TFrame FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#  define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#  define nimln_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[2];
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
};
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___RkX9btpg5sQIaP8yYXB6tbA)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_LIB_PRIVATE N_NIMCALL(void, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_7, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
N_LIB_PRIVATE tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {
 NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = NIM_NIL;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
static N_INLINE(void, popSafePoint)(void) {
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {
}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_3;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_3);
 TM__SRd76hP9cMfCzdUO857UhQQ_3.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_3.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status == 0) {
  tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
  nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4));
  T2_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
  echoBinSafe(T2_, 2);
  nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
  T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
  echoBinSafe(T3_, 2);
  nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
  T4_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(newV);
  echoBinSafe(T4_, 2);
  {
   if (!!((newV.p == (&newV.n)))) goto LA7_;
   failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_7));
  }
  LA7_: ;
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
  if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_3.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 tyArray__Re75IspeoxXy2oCZHwcRrA T1_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T2_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 oldV__AFz13lOl6ux2K6DQb2fYAQ.n = ((NI) 1);
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T1_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T1_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 T1_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T1_, 2);
 T2_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T2_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:19
  • Finished 2024-05-08T11:13:20
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
1.0.10 👎 FAIL

Output

Error: Command failed: nim c --run  -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim decodeN
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-1.0.10/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.addr`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 97.84 Kb (100,184 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <setjmp.h>
#include <string.h>
#  define nimfr_(proc, file) \
 TFrame FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#  define nimfrs_(proc, file, slots, length) \
 struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
 FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#  define nimln_(n, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg;
typedef struct Exception Exception;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct tySequence__uB9b75OUPRENsBAu4AnoePA tySequence__uB9b75OUPRENsBAu4AnoePA;
typedef struct TSafePoint TSafePoint;
typedef struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA;
struct tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg {
NI n;
NI* p;
};
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct Exception {
RootObj Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
tySequence__uB9b75OUPRENsBAu4AnoePA* trace;
NU raiseId;
Exception* up;
};
typedef long tyArray__TcvIiMAJvcwzNLsZkfnFnQ[25];
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClP_0) (Exception* e, void* ClE_0);
void* ClE_0;
} tyProc__NT9bSe2DDkjdtx7j9aov2Z6g;
struct TSafePoint {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
tyProc__NT9bSe2DDkjdtx7j9aov2Z6g raiseAction;
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NimStringDesc* tyArray__Re75IspeoxXy2oCZHwcRrA[2];
struct tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA {
NCSTRING procname;
NI line;
NCSTRING filename;
};
struct tySequence__uB9b75OUPRENsBAu4AnoePA {
TGenericSeq Sup;
tyObject_StackTraceEntry__oLyohQ7O2XOvGnflOss8EA data[SEQ_DECL_SIZE];
};
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(void, eqsink___WuHRWIKdmC5QPz5R2ZxCbg)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest, tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg source);
N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, popSafePoint)(void);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s);
N_NIMCALL(void, reraiseException)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___RkX9btpg5sQIaP8yYXB6tbA)(NU64 x);
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___Ib0RvzV2R9cEkwUHdYL19avA_2)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg x);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest);
N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg oldV__AFz13lOl6ux2K6DQb2fYAQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_4, "sink", 4);
NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_4)}
;
NIM_CONST tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg TM__SRd76hP9cMfCzdUO857UhQQ_5 = {((NI) 1), NIM_NIL};
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_6, "old p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_8, "new p: ", 7);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_9, "old value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_10, "new value: ", 11);
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_11, "/home/runner/work/Nim/Nim/temp.nim(20, 12) `newV.p == newV.n.ad"
"dr` ", 67);
static N_INLINE(void, pushSafePoint)(TSafePoint* s) {	(*s).hasRaiseAction = NIM_FALSE;
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
static N_INLINE(void, nimFrame)(TFrame* s) {	NI T1_;
 T1_ = (NI)0;
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA4_;
  T1_ = ((NI) 0);
 }
 goto LA2_;
 LA4_: ;
 {
  T1_ = ((NI) ((NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1))));
 }
 LA2_: ;
 (*s).calldepth = ((NI16) (T1_));
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA9_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA9_: ;
}
static N_INLINE(void, popFrame)(void) {	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqsink___WuHRWIKdmC5QPz5R2ZxCbg)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest, tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg source) {	nimfr_("=sink", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 (*dest).n = source.n;
 (*dest).p = (&(*dest).n);
 popFrame();
}
static N_INLINE(void, popSafePoint)(void) {	excHandler__rqLlY5bs9atDw2OXYqJEn5g = (*excHandler__rqLlY5bs9atDw2OXYqJEn5g).prev;
}
static N_INLINE(TFrame*, getFrame)(void) {	TFrame* result;
 result = (TFrame*)0;
 result = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s) {	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {	void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {	nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA)(NI* p) {	NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___cNWAXSpFRtj9bkL4Q1ZfdmA_2)(NI* p) {	NimStringDesc* result;
 nimfr_("$", "/home/runner/work/Nim/Nim/temp.nim");
 result = (NimStringDesc*)0;
 result = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (p)))));
 popFrame();
 return result;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg* dest) {}
N_LIB_PRIVATE N_NIMCALL(void, decodeN__VmWgbyObnJU9blGk5yE6Xow)(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg newV) {	TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_7;
 TFrame* _nimCurFrame;
 nimfr_("decodeN", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_7);
 TM__SRd76hP9cMfCzdUO857UhQQ_7.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_7.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_7.status == 0) {
  tyArray__Re75IspeoxXy2oCZHwcRrA T2_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T3_;
  tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
  nimZeroMem((void*)T2_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T2_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_8));
  T2_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (newV.p)))));
  echoBinSafe(T2_, 2);
  nimZeroMem((void*)T3_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T3_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_9));
  T3_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA(oldV__AFz13lOl6ux2K6DQb2fYAQ);
  echoBinSafe(T3_, 2);
  nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
  T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_10));
  T4_[1] = dollar___Ib0RvzV2R9cEkwUHdYL19avA_2(newV);
  echoBinSafe(T4_, 2);
  {
   if (!!((newV.p == (&newV.n)))) goto LA7_;
   failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_11));
  }
  LA7_: ;
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&newV));
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_7.status != 0) reraiseException();
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {	nimGC_setStackBottom(locals);
}
void PreMainInner(void) {
}
int cmdCount;
char** cmdLine;
char** gEnv;
void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 (*inner)();
}
N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_2;
 TFrame* _nimCurFrame;
 tyArray__Re75IspeoxXy2oCZHwcRrA T4_;
 tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg T5_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_2);
 TM__SRd76hP9cMfCzdUO857UhQQ_2.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_2.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status == 0) {
  eqsink___WuHRWIKdmC5QPz5R2ZxCbg((&oldV__AFz13lOl6ux2K6DQb2fYAQ), TM__SRd76hP9cMfCzdUO857UhQQ_5);
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status != 0) reraiseException();
 oldV__AFz13lOl6ux2K6DQb2fYAQ.p = (&oldV__AFz13lOl6ux2K6DQb2fYAQ.n);
 nimZeroMem((void*)T4_, sizeof(tyArray__Re75IspeoxXy2oCZHwcRrA));
 T4_[0] = copyString(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_6));
 T4_[1] = dollar___RkX9btpg5sQIaP8yYXB6tbA(((NU64) (((NU) (ptrdiff_t) (oldV__AFz13lOl6ux2K6DQb2fYAQ.p)))));
 echoBinSafe(T4_, 2);
 T5_ = oldV__AFz13lOl6ux2K6DQb2fYAQ;
 chckNil((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 nimZeroMem((void*)(&oldV__AFz13lOl6ux2K6DQb2fYAQ), sizeof(tyObject_Obj__aUn5SLDz0QPhgEhlLh33kg));
 decodeN__VmWgbyObnJU9blGk5yE6Xow(T5_);
 eqdestroy___vyTnmVM4z9adBqAVCMUFGWQ((&oldV__AFz13lOl6ux2K6DQb2fYAQ));
 popFrame();
}
}

Stats

  • Started 2024-05-08T11:13:22
  • Finished 2024-05-08T11:13:22
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Obj"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("n"),
            newIdentNode("int"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("p"),
            nnkPtrTy.newTree(
              newIdentNode("int")
            ),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        newIdentNode("pointer"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("$")
      )
    ),
    newEmptyNode(),
    nnkGenericParams.newTree(
      nnkIdentDefs.newTree(
        newIdentNode("T"),
        newEmptyNode(),
        newEmptyNode()
      )
    ),
    nnkFormalParams.newTree(
      newIdentNode("string"),
      nnkIdentDefs.newTree(
        newIdentNode("p"),
        nnkPtrTy.newTree(
          newIdentNode("T")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkPrefix.newTree(
        newIdentNode("$"),
        nnkCast.newTree(
          newIdentNode("uint"),
          newIdentNode("p")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("sink")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("dest"),
        nnkVarTy.newTree(
          newIdentNode("Obj")
        ),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("source"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("sink")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("n")
        ),
        nnkDotExpr.newTree(
          newIdentNode("source"),
          newIdentNode("n")
        )
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("dest"),
          newIdentNode("p")
        ),
        nnkDotExpr.newTree(
          nnkDotExpr.newTree(
            newIdentNode("dest"),
            newIdentNode("n")
          ),
          newIdentNode("addr")
        )
      )
    )
  ),
  nnkProcDef.newTree(
    nnkPostfix.newTree(
      newIdentNode("*"),
      nnkAccQuoted.newTree(
        newIdentNode("="),
        newIdentNode("dup")
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Obj"),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        newIdentNode("Obj"),
        newEmptyNode()
      )
    ),
    nnkPragma.newTree(
      newIdentNode("nodestroy")
    ),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("dup")
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("oldV"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Obj"),
        nnkExprColonExpr.newTree(
          newIdentNode("n"),
          newLit(1)
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("decodeN"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("newV"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("Obj")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new p: "),
        nnkCast.newTree(
          newIdentNode("uint"),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("old value: "),
        newIdentNode("oldV")
      ),
      nnkCommand.newTree(
        newIdentNode("echo"),
        newLit("new value: "),
        newIdentNode("newV")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("newV"),
            newIdentNode("p")
          ),
          nnkDotExpr.newTree(
            nnkDotExpr.newTree(
              newIdentNode("newV"),
              newIdentNode("n")
            ),
            newIdentNode("addr")
          )
        )
      )
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("oldV"),
      newIdentNode("p")
    ),
    nnkDotExpr.newTree(
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("n")
      ),
      newIdentNode("addr")
    )
  ),
  nnkCommand.newTree(
    newIdentNode("echo"),
    newLit("old p: "),
    nnkCast.newTree(
      newIdentNode("uint"),
      nnkDotExpr.newTree(
        newIdentNode("oldV"),
        newIdentNode("p")
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("decodeN"),
    nnkCommand.newTree(
      newIdentNode("move"),
      newIdentNode("oldV")
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.2
  • Created 2024-05-08T11:12:38Z
  • Comments 1
  • Commands nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

🤖 Bug found in 19 minutes bisecting 7 commits at 0 commits per second

from nim.

haoyu234 avatar haoyu234 commented on June 11, 2024

Okay, I should turn off this issue.

from nim.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.