GithubHelp home page GithubHelp logo

Comments (16)

gmega avatar gmega commented on June 19, 2024 1

!nim c --gc:refc

type AnObject* = object of RootObj
  value*: int

proc mutate(a: sink AnObject) =
  a.value = 1

var obj = AnObject(value: 42)
mutate(obj)
doAssert obj.value == 42

from nim.

gmega avatar gmega commented on June 19, 2024 1

!nim c --gc:refc

type AnObject = object of RootObj
  value*: int

proc `=destroy`(x: var AnObject) = discard

proc mutate(a: sink AnObject) =
  a.value = 1

var obj = AnObject(value: 42)
mutate(obj)
doAssert obj.value == 42

from nim.

ringabout avatar ringabout commented on June 19, 2024 1

!nim c --gc:arc

type AnObject* = object of RootObj
  value*: int

proc mutate(a: sink AnObject) =
  a.value = 1

proc foo =
  var obj = AnObject(value: 42)
  doAssert obj.value == 42
  mutate(obj)
  doAssert obj.value  == 42

foo()

from nim.

ringabout avatar ringabout commented on June 19, 2024 1

arc is affected as well, which is a regression, I will fix that first => #23359

from nim.

ringabout avatar ringabout commented on June 19, 2024 1

related issues: #22175 #12340 #22173

from nim.

arnetheduck avatar arnetheduck commented on June 19, 2024

does this also affect 2.0/refc?

from nim.

gmega avatar gmega commented on June 19, 2024

@arnetheduck yes it does, unfortunately.

from nim.

github-actions avatar github-actions commented on June 19, 2024
🐧 Linux bisect by @gmega (contributor)
devel 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/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(7, 1) `obj.value == 42`  [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 106.34 Kb (108,896 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__ClA3xuAkmIebTG0trkhp7w;
typedef NU8 tySet_tyEnum_TNimTypeFlag__lkZ7PEzlp5IUJlUpsPWkog;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__ClA3xuAkmIebTG0trkhp7w kind;
 tySet_tyEnum_TNimTypeFlag__lkZ7PEzlp5IUJlUpsPWkog flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__IIT6i6x8UigmmmGU9bo5uUw;
struct TNimNode {
 tyEnum_TNimNodeKind__IIT6i6x8UigmmmGU9bo5uUw kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3151)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u69)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u21 = {{(&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_)}, ((NI)42)}
;
extern NIM_THREADVAR TFrame* framePtr__system_u2625;
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2625 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2625).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2625;
 framePtr__system_u2625 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3151();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2625 = (*framePtr__system_u2625).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__temp_u3((&obj__temp_u21));
 {
  if (!!((obj__temp_u21.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u69(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:08
  • Finished 2024-02-27T12:28:09
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
stable 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/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(7, 1) `obj.value == 42`  [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 106.33 Kb (108,880 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__tkzilgOTS67iC3a7h549aiw;
typedef NU8 tySet_tyEnum_TNimTypeFlag__9aI2dAe9cy2LQ7Dp9cypyl4rA;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__tkzilgOTS67iC3a7h549aiw kind;
 tySet_tyEnum_TNimTypeFlag__9aI2dAe9cy2LQ7Dp9cypyl4rA flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__wYCe8vXIm9cHBnYL2fAWT2A;
struct TNimNode {
 tyEnum_TNimNodeKind__wYCe8vXIm9cHBnYL2fAWT2A kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3134)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u85)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u21 = {{(&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_)}, ((NI)42)}
;
extern NIM_THREADVAR TFrame* framePtr__system_u2601;
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2601 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2601).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2601;
 framePtr__system_u2601 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3134();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2601 = (*framePtr__system_u2601).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__temp_u3((&obj__temp_u21));
 {
  if (!!((obj__temp_u21.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u85(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:10
  • Finished 2024-02-27T12:28:10
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
2.0.0 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(7, 1) `obj.value == 42`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(664, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 106.34 Kb (108,888 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__gvi1epwSO1OTm5TYYpvciQ;
typedef NU8 tySet_tyEnum_TNimTypeFlag__kg8CbOmSm78f9cYZNYwXtRw;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__gvi1epwSO1OTm5TYYpvciQ kind;
 tySet_tyEnum_TNimTypeFlag__kg8CbOmSm78f9cYZNYwXtRw flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__27ptuqE7C12XXCcK2N0u8g;
struct TNimNode {
 tyEnum_TNimNodeKind__27ptuqE7C12XXCcK2N0u8g kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3134)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u85)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u21 = {{(&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_)}, ((NI)42)}
;
extern NIM_THREADVAR TFrame* framePtr__system_u2601;
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2601 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2601).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2601;
 framePtr__system_u2601 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3134();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2601 = (*framePtr__system_u2601).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__temp_u3((&obj__temp_u21));
 {
  if (!!((obj__temp_u21.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u85(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:14
  • Finished 2024-02-27T12:28:14
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
1.6.14 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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/.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(7, 10) `obj.value == 42`  [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 96.10 Kb (98,408 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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;
};
typedef NU8 tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w;
struct TNimNode {
tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
NI value;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a);
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, 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, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_14 = {{(&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_)}, ((NI) 42)}
;
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;
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(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 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();
 atmtempdotnim_DatInit000();
 (*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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__temp_3((&obj__temp_14));
 {
  if (!!((obj__temp_14.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__systemZassertions_56(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:17
  • Finished 2024-02-27T12:28:17
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
1.4.8 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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/.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(7, 10) `obj.value == 42`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 91.95 Kb (94,152 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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, 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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ = {{(&NTI__gAP7Gu59agAnSCrqKpcTiRw_)}, ((NI) 42)}
;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 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();
 tempDatInit000();
 (*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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 {
  if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.align = NIM_ALIGNOF(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:20
  • Finished 2024-02-27T12:28:20
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
1.2.18 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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/.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(7, 10) `obj.value == 42`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 91.68 Kb (93,880 bytes)
#define NIM_INTBITS 64
#include "nimbase.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 TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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, 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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ = {{(&NTI__gAP7Gu59agAnSCrqKpcTiRw_)}, ((NI) 42)}
;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 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();
 tempDatInit000();
 (*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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 {
  if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:22
  • Finished 2024-02-27T12:28:22
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
1.0.10 👎 FAIL

Output

Error: Command failed: nim c --gc:refc --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/.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(7, 10) `obj.value == 42`  [AssertionError]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '

IR

Compiled filesize 87.07 Kb (89,160 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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, 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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ;
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(7, 10) `obj.value == 42` ", 60);
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, 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, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {	nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 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();
 tempDatInit000();
 (*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) {
{
 TFrame FR_; FR_.len = 0;
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
}
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 chckNil((void*)(&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 nimZeroMem((void*)(&obj__bFjgGo7GZlNDqAm3QOKVYQ), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 obj__bFjgGo7GZlNDqAm3QOKVYQ.value = ((NI) 42);
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 {
  if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T12:28:24
  • Finished 2024-02-27T12:28:25
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("obj"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("AnObject"),
        nnkExprColonExpr.newTree(
          newIdentNode("value"),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("mutate"),
    newIdentNode("obj")
  ),
  nnkCommand.newTree(
    newIdentNode("doAssert"),
    nnkInfix.newTree(
      newIdentNode("=="),
      nnkDotExpr.newTree(
        newIdentNode("obj"),
        newIdentNode("value")
      ),
      newLit(42)
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 19.1
  • Created 2024-02-27T12:27:39Z
  • Comments 3
  • Commands nim c --gc:refc --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.

gmega avatar gmega commented on June 19, 2024

Btw, I've realized that force-enabling injectDestructorCalls (in genProcAux) fixes the issue, as does creating a bogus destructor for AnObject. My currently working hypothesis is that the sink copy logic (which is embedded in injectDestructorCalls) only gets triggered for refc when there's a destructor defined for one of the types in the proc's signature.

from nim.

github-actions avatar github-actions commented on June 19, 2024
🐧 Linux bisect by @gmega (contributor)
devel 👍 OK

Output


IR

Compiled filesize 106.46 Kb (109,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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__ClA3xuAkmIebTG0trkhp7w;
typedef NU8 tySet_tyEnum_TNimTypeFlag__lkZ7PEzlp5IUJlUpsPWkog;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__ClA3xuAkmIebTG0trkhp7w kind;
 tySet_tyEnum_TNimTypeFlag__lkZ7PEzlp5IUJlUpsPWkog flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
typedef NU8 tyEnum_TNimNodeKind__IIT6i6x8UigmmmGU9bo5uUw;
struct TNimNode {
 tyEnum_TNimNodeKind__IIT6i6x8UigmmmGU9bo5uUw kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
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);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3151)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u69)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(8, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u20;
extern NIM_THREADVAR TFrame* framePtr__system_u2625;
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(void, nimZeroMem)(void* p_p0, NI size_p1) {
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2625 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2625).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2625;
 framePtr__system_u2625 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3151();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2625 = (*framePtr__system_u2625).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 eqdestroy___temp_u3(a_p0);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result) {
 nimZeroMem((void*)Result, sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 (*Result).Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 (*Result).value = (*src_p0).value;
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 TFrame FR_; FR_.len = 0;
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
}
{
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj__temp_u20), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 obj__temp_u20.value = ((NI)42);
 eqdup___temp_u13((&obj__temp_u20), (&colontmpD_));
 mutate__temp_u5((&colontmpD_));
 {
  if (!!((obj__temp_u20.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u69(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 eqdestroy___temp_u3((&obj__temp_u20));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:13
  • Finished 2024-02-27T23:58:14
  • Duration
stable 👍 OK

Output


IR

Compiled filesize 106.44 Kb (108,992 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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__tkzilgOTS67iC3a7h549aiw;
typedef NU8 tySet_tyEnum_TNimTypeFlag__9aI2dAe9cy2LQ7Dp9cypyl4rA;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__tkzilgOTS67iC3a7h549aiw kind;
 tySet_tyEnum_TNimTypeFlag__9aI2dAe9cy2LQ7Dp9cypyl4rA flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
typedef NU8 tyEnum_TNimNodeKind__wYCe8vXIm9cHBnYL2fAWT2A;
struct TNimNode {
 tyEnum_TNimNodeKind__wYCe8vXIm9cHBnYL2fAWT2A kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
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);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3134)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u85)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(8, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u20;
extern NIM_THREADVAR TFrame* framePtr__system_u2601;
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(void, nimZeroMem)(void* p_p0, NI size_p1) {
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2601 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2601).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2601;
 framePtr__system_u2601 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3134();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2601 = (*framePtr__system_u2601).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 eqdestroy___temp_u3(a_p0);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result) {
 nimZeroMem((void*)Result, sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 (*Result).Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 (*Result).value = (*src_p0).value;
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 TFrame FR_; FR_.len = 0;
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
}
{
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj__temp_u20), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 obj__temp_u20.value = ((NI)42);
 eqdup___temp_u13((&obj__temp_u20), (&colontmpD_));
 mutate__temp_u5((&colontmpD_));
 {
  if (!!((obj__temp_u20.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u85(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 eqdestroy___temp_u3((&obj__temp_u20));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:14
  • Finished 2024-02-27T23:58:14
  • Duration
2.0.0 👍 OK

Output


IR

Compiled filesize 106.45 Kb (109,008 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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef NU8 tyEnum_TNimKind__gvi1epwSO1OTm5TYYpvciQ;
typedef NU8 tySet_tyEnum_TNimTypeFlag__kg8CbOmSm78f9cYZNYwXtRw;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p_p0, NI op_p1);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p_p0);
struct TNimType {
 NI size;
 NI align;
 tyEnum_TNimKind__gvi1epwSO1OTm5TYYpvciQ kind;
 tySet_tyEnum_TNimTypeFlag__kg8CbOmSm78f9cYZNYwXtRw flags;
 TNimType* base;
 TNimNode* node;
 void* finalizer;
 tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
 tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
typedef NU8 tyEnum_TNimNodeKind__27ptuqE7C12XXCcK2N0u8g;
struct TNimNode {
 tyEnum_TNimNodeKind__27ptuqE7C12XXCcK2N0u8g kind;
 NI offset;
 TNimType* typ;
 NCSTRING name;
 NI len;
 TNimNode** sons;
};
struct TGenericSeq {
 NI len;
 NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
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);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u3134)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u85)(NimStringDesc* msg_p0);
static N_INLINE(void, initStackBottomWith)(void* locals_p0);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom_p0);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(8, 1) `obj.value == 42` ", 59);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_u20;
extern NIM_THREADVAR TFrame* framePtr__system_u2601;
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(void, nimZeroMem)(void* p_p0, NI size_p1) {
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2601 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2601).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2601;
 framePtr__system_u2601 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u3134();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2601 = (*framePtr__system_u2601).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 eqdestroy___temp_u3(a_p0);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqdup___temp_u13)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src_p0, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* Result) {
 nimZeroMem((void*)Result, sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 (*Result).Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 (*Result).value = (*src_p0).value;
}
static N_INLINE(void, initStackBottomWith)(void* locals_p0) {
 nimGC_setStackBottom(locals_p0);
}
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 1
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 1
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
#else
 PreMain();
 initStackBottomWith((void *)&inner);
 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) {
{
 TFrame FR_; FR_.len = 0;
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
}
{
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj__temp_u20), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj__temp_u20.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 obj__temp_u20.value = ((NI)42);
 eqdup___temp_u13((&obj__temp_u20), (&colontmpD_));
 mutate__temp_u5((&colontmpD_));
 {
  if (!!((obj__temp_u20.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u85(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
LA3_: ;
 eqdestroy___temp_u3((&obj__temp_u20));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:17
  • Finished 2024-02-27T23:58:17
  • Duration
1.6.14 👍 OK

Output


IR

Compiled filesize 96.22 Kb (98,528 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
NI value;
};
typedef NU8 tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w;
struct TNimNode {
tyEnum_TNimNodeKind__XtzEyxd2A8uwMJcYYak9c7w kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR 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(void, mutate__temp_5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* 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, eqcopy___temp_7)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* dest, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__systemZassertions_56)(NimStringDesc* msg);
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, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTIanobject__mYtkcMynpviMNZYFlqg5JQ_;
extern TNimType NTIint__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(8, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj__temp_13;
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;
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, 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(void, eqdestroy___temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_5)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 eqdestroy___temp_3(a);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqcopy___temp_7)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* dest, tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* src) {
 (*dest).value = (*src).value;
}
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();
 atmtempdotnim_DatInit000();
 (*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) {
{
 TFrame FR_; FR_.len = 0;
 obj__temp_13.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
}
{
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj__temp_13), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj__temp_13.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 obj__temp_13.value = ((NI) 42);
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIanobject__mYtkcMynpviMNZYFlqg5JQ_);
 eqcopy___temp_7((&colontmpD_), (&obj__temp_13));
 mutate__temp_5((&colontmpD_));
 {
  if (!!((obj__temp_13.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__systemZassertions_56(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 eqdestroy___temp_3((&obj__temp_13));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.kind = 17;
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.base = (&NTIrootobj__ytyiCJqK439aF9cIibuRVpAg_);
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTIint__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTIanobject__mYtkcMynpviMNZYFlqg5JQ_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:19
  • Finished 2024-02-27T23:58:20
  • Duration
1.4.8 👍 OK

Output


IR

Compiled filesize 92.09 Kb (94,304 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
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 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
TGenericSeq Sup;
NIM_CHAR 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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* 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, eqcopy___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_2, "/home/runner/work/Nim/Nim/temp.nim(8, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
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, 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(void, eqdestroy___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 eqdestroy___I88kp5RIfy39bkJAhsRaJYg(a);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqcopy___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src) {
 (*dest).value = (*src).value;
}
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();
 tempDatInit000();
 (*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) {
{
 TFrame FR_; FR_.len = 0;
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
}
{
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 nimZeroMem((void*)(&obj__bFjgGo7GZlNDqAm3QOKVYQ), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 obj__bFjgGo7GZlNDqAm3QOKVYQ.value = ((NI) 42);
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 eqcopy___dLT8FhygADjcDqvvBkn0Aw((&colontmpD_), (&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&colontmpD_));
 {
  if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_2));
 }
 LA3_: ;
 eqdestroy___I88kp5RIfy39bkJAhsRaJYg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.align = NIM_ALIGNOF(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:22
  • Finished 2024-02-27T23:58:23
  • Duration
1.2.18 👍 OK

Output


IR

Compiled filesize 92.27 Kb (94,480 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_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Exception Exception;
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;
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 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
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;
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_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
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___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* 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, nimLeaveFinally)(void);
N_LIB_PRIVATE N_NIMCALL(void, reraiseException)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqcopy___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_3, "/home/runner/work/Nim/Nim/temp.nim(8, 10) `obj.value == 42` ", 60);
N_LIB_PRIVATE tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
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 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, 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, 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(void, eqdestroy___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_2;
 TFrame* _nimCurFrame;
 nimfr_("mutate", "/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) {
  (*a).value = ((NI) 1);
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___I88kp5RIfy39bkJAhsRaJYg(a);
  if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status != 0) nimLeaveFinally();
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status != 0) reraiseException();
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eqcopy___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src) {
 (*dest).value = (*src).value;
}
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();
 tempDatInit000();
 (*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) {
{
 TFrame FR_; FR_.len = 0;
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
}
{
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 chckNil((void*)(&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 nimZeroMem((void*)(&obj__bFjgGo7GZlNDqAm3QOKVYQ), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 obj__bFjgGo7GZlNDqAm3QOKVYQ.value = ((NI) 42);
 chckNil((void*)(&colontmpD_));
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 eqcopy___dLT8FhygADjcDqvvBkn0Aw((&colontmpD_), (&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&colontmpD_));
 {
  if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_3));
 }
 LA3_: ;
 eqdestroy___I88kp5RIfy39bkJAhsRaJYg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:25
  • Finished 2024-02-27T23:58:25
  • Duration
1.0.10 👍 OK

Output


IR

Compiled filesize 91.83 Kb (94,032 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_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Exception Exception;
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;
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 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
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;
};
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);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
N_LIB_PRIVATE N_NIMCALL(void, eqsink___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src);
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* x);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_NIMCALL(void, reraiseException)(void);
N_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, eq___dLT8FhygADjcDqvvBkn0Aw_2)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringDesc* msg);
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, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj__bFjgGo7GZlNDqAm3QOKVYQ;
extern TNimType NTI__ytyiCJqK439aF9cIibuRVpAg_;
TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
extern TNimType NTI__rR5Bzr1D5krxoo1NcNyeMA_;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
extern TSafePoint* excHandler__rqLlY5bs9atDw2OXYqJEn5g;
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 TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
NIM_CONST tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{(&NTI__gAP7Gu59agAnSCrqKpcTiRw_)}, ((NI) 42)};
STRING_LITERAL(TM__SRd76hP9cMfCzdUO857UhQQ_5, "/home/runner/work/Nim/Nim/temp.nim(8, 10) `obj.value == 42` ", 60);
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).hasRaiseAction = NIM_FALSE;
 (*s).prev = excHandler__rqLlY5bs9atDw2OXYqJEn5g;
 excHandler__rqLlY5bs9atDw2OXYqJEn5g = s;
}
N_LIB_PRIVATE N_NIMCALL(void, eqsink___dLT8FhygADjcDqvvBkn0Aw)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src) {	(*dest).value = (*src).value;
}
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, 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, eqdestroy___I88kp5RIfy39bkJAhsRaJYg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* x) {	nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {	TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_4;
 TFrame* _nimCurFrame;
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_4);
 TM__SRd76hP9cMfCzdUO857UhQQ_4.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_4.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_4.status == 0) {
  (*a).value = ((NI) 1);
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
  eqdestroy___I88kp5RIfy39bkJAhsRaJYg(a);
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_4.status != 0) reraiseException();
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, eq___dLT8FhygADjcDqvvBkn0Aw_2)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* dest, tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* src) {	(*dest).value = (*src).value;
}
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();
 tempDatInit000();
 (*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) {
{
 TFrame FR_; FR_.len = 0;
 obj__bFjgGo7GZlNDqAm3QOKVYQ.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
}
{
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw colontmpD_;
 TSafePoint TM__SRd76hP9cMfCzdUO857UhQQ_2;
 TFrame* _nimCurFrame;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 pushSafePoint(&TM__SRd76hP9cMfCzdUO857UhQQ_2);
 TM__SRd76hP9cMfCzdUO857UhQQ_2.status = setjmp(TM__SRd76hP9cMfCzdUO857UhQQ_2.context);
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status == 0) {
  eqsink___dLT8FhygADjcDqvvBkn0Aw((&obj__bFjgGo7GZlNDqAm3QOKVYQ), (&TM__SRd76hP9cMfCzdUO857UhQQ_3));
  chckNil((void*)(&colontmpD_));
  nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
  colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
  eq___dLT8FhygADjcDqvvBkn0Aw_2((&colontmpD_), (&obj__bFjgGo7GZlNDqAm3QOKVYQ));
  mutate__TfI9cchAOeV9cirL3DdZtkVg((&colontmpD_));
  {
   if (!!((obj__bFjgGo7GZlNDqAm3QOKVYQ.value == ((NI) 42)))) goto LA4_;
   failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(((NimStringDesc*) &TM__SRd76hP9cMfCzdUO857UhQQ_5));
  }
  LA4_: ;
  popSafePoint();
 }
 else {
  popSafePoint();
  setFrame(_nimCurFrame);
 }
 {
 }
 if (TM__SRd76hP9cMfCzdUO857UhQQ_2.status != 0) reraiseException();
 eqdestroy___I88kp5RIfy39bkJAhsRaJYg((&obj__bFjgGo7GZlNDqAm3QOKVYQ));
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[1];
NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.kind = 17;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.base = (&NTI__ytyiCJqK439aF9cIibuRVpAg_);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.flags = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].offset = offsetof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw, value);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].typ = (&NTI__rR5Bzr1D5krxoo1NcNyeMA_);
TM__SRd76hP9cMfCzdUO857UhQQ_0[0].name = "value";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[0];
}

Stats

  • Started 2024-02-27T23:58:27
  • Finished 2024-02-27T23:58:27
  • Duration
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 19.1
  • Created 2024-02-27T23:57:45Z
  • Comments 6
  • Commands nim c --gc:refc --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 17 minutes bisecting 7 commits at 0 commits per second

from nim.

elcritch avatar elcritch commented on June 19, 2024

!nim c --gc:refc

type AnObject = object of RootObj
  value*: int

proc `=destroy`(x: var AnObject) = discard

proc mutate(a: sink AnObject) =
  a.value = 1

var obj = AnObject(value: 42)
mutate(obj)
doAssert obj.value == 42

@gmega oh odd, adding a destructor for the test object fixes it? Hmmm, maybe it'll be an easy fix of triggering whatever logic gets triggered when there's a destructor.

from nim.

gmega avatar gmega commented on June 19, 2024

@gmega oh odd, adding a destructor for the test object fixes it? Hmmm, maybe it'll be an easy fix of triggering whatever logic gets triggered when there's a destructor.

Well, either that or forcing injectDestructorCalls, which I think is the same path. I'm not entirely sure what an acceptable solution would be here as that logic that handles sink args is intertwined with injection of destructors. If it's just a matter of triggering it, then I suppose adding a weaker condition (or no condition at all) to injectDestructorCalls (e.g. something that checks if the proc has a sink arg) would be enough.

from nim.

github-actions avatar github-actions commented on June 19, 2024
🐧 Linux bisect by @ringabout (member)
devel 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:nimArcDebug -d:nimArcIds  --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim foo
/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(9, 3) `obj.value == 42`  [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 89.39 Kb (91,536 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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
 void* vTable[SEQ_DECL_SIZE];
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void);
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(void, failedAssertImpl__stdZassertions_u219)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4172)(void);
static N_INLINE(void, popFrame)(void);
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);
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_;
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_3 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_4 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_3};
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_5 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_6 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_5};
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3982;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_2[2] = {3701606400, 2338615296};
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .align = (NI16) NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_2, .traceImpl = (void*)NIM_NIL, .flags = 0};
extern NIM_THREADVAR TFrame* framePtr__system_u2653;
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_u3982);
 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_u2653 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2653).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2653;
 framePtr__system_u2653 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4172();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2653 = (*framePtr__system_u2653).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void) {
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.value = ((NI)42);
 {
  if (!!((obj.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u219(TM__SRd76hP9cMfCzdUO857UhQQ_4);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA3_: ;
 mutate__temp_u3((&obj));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI)42)))) goto LA7_;
  failedAssertImpl__stdZassertions_u219(TM__SRd76hP9cMfCzdUO857UhQQ_6);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__temp_u27();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-02-28T12:24:51
  • Finished 2024-02-28T12:24:52
  • Duration 1 minutes

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("foo"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode()
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkVarSection.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("obj"),
          newEmptyNode(),
          nnkObjConstr.newTree(
            newIdentNode("AnObject"),
            nnkExprColonExpr.newTree(
              newIdentNode("value"),
              newLit(42)
            )
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      ),
      nnkCall.newTree(
        newIdentNode("mutate"),
        newIdentNode("obj")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("foo")
  )
)
stable 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:nimArcDebug -d:nimArcIds  --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim foo
/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(9, 3) `obj.value == 42`  [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 87.41 Kb (89,512 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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void);
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(void, failedAssertImpl__stdZassertions_u266)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4173)(void);
static N_INLINE(void, popFrame)(void);
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);
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_;
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_3 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_4 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_3};
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_5 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_6 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_5};
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3981;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_2[2] = {3701606400, 2338615296};
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .align = (NI16) NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_2, .traceImpl = (void*)NIM_NIL, .flags = 0};
extern NIM_THREADVAR TFrame* framePtr__system_u3619;
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_u3981);
 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_u3619 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3619).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u3619;
 framePtr__system_u3619 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4173();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u3619 = (*framePtr__system_u3619).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void) {
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.value = ((NI)42);
 {
  if (!!((obj.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u266(TM__SRd76hP9cMfCzdUO857UhQQ_4);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA3_: ;
 mutate__temp_u3((&obj));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI)42)))) goto LA7_;
  failedAssertImpl__stdZassertions_u266(TM__SRd76hP9cMfCzdUO857UhQQ_6);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__temp_u27();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-02-28T12:24:53
  • Finished 2024-02-28T12:24:54
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("foo"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode()
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkVarSection.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("obj"),
          newEmptyNode(),
          nnkObjConstr.newTree(
            newIdentNode("AnObject"),
            nnkExprColonExpr.newTree(
              newIdentNode("value"),
              newLit(42)
            )
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      ),
      nnkCall.newTree(
        newIdentNode("mutate"),
        newIdentNode("obj")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("foo")
  )
)
2.0.0 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:nimArcDebug -d:nimArcIds  --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
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/work/Nim/Nim/temp.nim foo
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/std/assertions.nim failedAssertImpl
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/std/assertions.nim raiseAssert
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/fatal.nim sysFatal
Error: unhandled exception: /home/runner/work/Nim/Nim/temp.nim(9, 3) `obj.value == 42`  [AssertionDefect]
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(664, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 87.31 Kb (89,408 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_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
 NI value;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void);
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(void, failedAssertImpl__stdZassertions_u266)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4159)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_;
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_3 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_4 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_3};
static const struct {
NI cap; NIM_CHAR data[59+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_5 = { 59 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 3) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_6 = {59, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_5};
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3967;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_2[2] = {3701606400, 2338615296};
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .align = (NI16) NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_2, .traceImpl = (void*)NIM_NIL, .flags = 0};
extern NIM_THREADVAR TFrame* framePtr__system_u3605;
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 = (NIM_BOOL*)0;
 result = (&nimInErrorMode__system_u3967);
 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_u3605 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3605).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u3605;
 framePtr__system_u3605 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4159();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u3605 = (*framePtr__system_u3605).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_u3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a_p0) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a_p0).value = ((NI)1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u27)(void) {
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.value = ((NI)42);
 {
  if (!!((obj.value == ((NI)42)))) goto LA3_;
  failedAssertImpl__stdZassertions_u266(TM__SRd76hP9cMfCzdUO857UhQQ_4);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA3_: ;
 mutate__temp_u3((&obj));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI)42)))) goto LA7_;
  failedAssertImpl__stdZassertions_u266(TM__SRd76hP9cMfCzdUO857UhQQ_6);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__temp_u27();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-02-28T12:24:57
  • Finished 2024-02-28T12:24:57
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("foo"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode()
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkVarSection.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("obj"),
          newEmptyNode(),
          nnkObjConstr.newTree(
            newIdentNode("AnObject"),
            nnkExprColonExpr.newTree(
              newIdentNode("value"),
              newLit(42)
            )
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      ),
      nnkCall.newTree(
        newIdentNode("mutate"),
        newIdentNode("obj")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("foo")
  )
)
1.6.14 👍 OK

Output


IR

Compiled filesize 81.53 Kb (83,488 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
NI value;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_18)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__systemZassertions_53)(NimStringV2 msg);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_4031)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_;
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_BOOL nimInErrorMode__system_3882;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
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(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__system_3882);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_3557 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_3557).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_3557;
 framePtr__system_3557 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_4031();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_3557 = (*framePtr__system_3557).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_18)(void) {
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.value = ((NI) 42);
 {
  if (!!((obj.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__systemZassertions_53(TM__SRd76hP9cMfCzdUO857UhQQ_3);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA3_: ;
 colontmpD_ = obj;
 mutate__temp_3((&colontmpD_));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI) 42)))) goto LA7_;
  failedAssertImpl__systemZassertions_53(TM__SRd76hP9cMfCzdUO857UhQQ_5);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 PreMain();
 NimMainInner();
}
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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__temp_18();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__mYtkcMynpviMNZYFlqg5JQ_.destructor = (void*)NIM_NIL; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ); NTIv2__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ); NTIv2__mYtkcMynpviMNZYFlqg5JQ_.name = "|nim.temp.AnObject|RootObj|";
; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.traceImpl = (void*)NIM_NIL; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.flags = 0;}

Stats

  • Started 2024-02-28T12:25:00
  • Finished 2024-02-28T12:25:00
  • Duration
1.4.8 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:nimArcDebug -d:nimArcIds  --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/.choosenim/toolchains/nim-1.4.8/lib/system/bitmasks.nim(13, 3) Error: redefinition of 'PageShift'; previous declaration here: /home/runner/.choosenim/toolchains/nim-1.4.8/lib/system/bitmasks.nim(13, 3)

IR

Compiled filesize 81.53 Kb (83,488 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ {
RootObj Sup;
NI value;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_18)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__systemZassertions_53)(NimStringV2 msg);
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_4031)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__mYtkcMynpviMNZYFlqg5JQ_;
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_BOOL nimInErrorMode__system_3882;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
extern TFrame* framePtr__system_3557;
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(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__system_3882);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_3557 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_3557).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_3557;
 framePtr__system_3557 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_4031();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_3557 = (*framePtr__system_3557).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, mutate__temp_3)(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_18)(void) {
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ colontmpD_;
 tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 colontmpD_.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ));
 obj.Sup.m_type = (&NTIv2__mYtkcMynpviMNZYFlqg5JQ_);
 obj.value = ((NI) 42);
 {
  if (!!((obj.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__systemZassertions_53(TM__SRd76hP9cMfCzdUO857UhQQ_3);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA3_: ;
 colontmpD_ = obj;
 mutate__temp_3((&colontmpD_));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI) 42)))) goto LA7_;
  failedAssertImpl__systemZassertions_53(TM__SRd76hP9cMfCzdUO857UhQQ_5);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 PreMainInner();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 PreMain();
 NimMainInner();
}
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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__temp_18();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__mYtkcMynpviMNZYFlqg5JQ_.destructor = (void*)NIM_NIL; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.size = sizeof(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ); NTIv2__mYtkcMynpviMNZYFlqg5JQ_.align = NIM_ALIGNOF(tyObject_AnObject__mYtkcMynpviMNZYFlqg5JQ); NTIv2__mYtkcMynpviMNZYFlqg5JQ_.name = "|nim.temp.AnObject|RootObj|";
; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.traceImpl = (void*)NIM_NIL; NTIv2__mYtkcMynpviMNZYFlqg5JQ_.flags = 0;}

Stats

  • Started 2024-02-28T12:25:02
  • Finished 2024-02-28T12:25:02
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("foo"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode()
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkVarSection.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("obj"),
          newEmptyNode(),
          nnkObjConstr.newTree(
            newIdentNode("AnObject"),
            nnkExprColonExpr.newTree(
              newIdentNode("value"),
              newLit(42)
            )
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      ),
      nnkCall.newTree(
        newIdentNode("mutate"),
        newIdentNode("obj")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("foo")
  )
)
1.2.18 👍 OK

Output


IR

Compiled filesize 73.42 Kb (75,184 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__EzBZaa239as9bFx8yeHDoTOw)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringV2 msg);
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
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(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__EzBZaa239as9bFx8yeHDoTOw)(void) {
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw colontmpD_;
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 chckNil((void*)(&obj));
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 obj.value = ((NI) 42);
 {
  if (!!((obj.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(TM__SRd76hP9cMfCzdUO857UhQQ_3);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA3_: ;
 colontmpD_ = obj;
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&colontmpD_));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI) 42)))) goto LA7_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(TM__SRd76hP9cMfCzdUO857UhQQ_5);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* 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();
 tempDatInit000();
 (*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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__EzBZaa239as9bFx8yeHDoTOw();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__gAP7Gu59agAnSCrqKpcTiRw_.destructor = (void*)NIM_NIL; NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.name = "|nim.temp.AnObject|RootObj|";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.traceImpl = (void*)NIM_NIL;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-02-28T12:25:04
  • Finished 2024-02-28T12:25:05
  • Duration
1.0.10 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:nimArcDebug -d:nimArcIds  --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
command line(1, 2) Error: 'none', 'boehm' or 'refc' expected, but 'arc' found

IR

Compiled filesize 73.42 Kb (75,184 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, file) \
 FR_.line = n; FR_.filename = file;
typedef struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw {
RootObj Sup;
NI value;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
N_LIB_PRIVATE N_NIMCALL(void, foo__EzBZaa239as9bFx8yeHDoTOw)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A)(NimStringV2 msg);
N_LIB_PRIVATE N_NIMCALL(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a);
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, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__gAP7Gu59agAnSCrqKpcTiRw_;
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(7, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[60+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 60 | NIM_STRLIT_FLAG, "/home/runner/work/Nim/Nim/temp.nim(9, 12) `obj.value == 42` " };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {60, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
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(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
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(void, mutate__TfI9cchAOeV9cirL3DdZtkVg)(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw* a) {
 nimfr_("mutate", "/home/runner/work/Nim/Nim/temp.nim");
 (*a).value = ((NI) 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, foo__EzBZaa239as9bFx8yeHDoTOw)(void) {
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw colontmpD_;
 tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw obj;
NIM_BOOL* nimErr_;
 nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&colontmpD_), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 colontmpD_.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 chckNil((void*)(&obj));
 nimZeroMem((void*)(&obj), sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw));
 obj.Sup.m_type = (&NTI__gAP7Gu59agAnSCrqKpcTiRw_);
 obj.value = ((NI) 42);
 {
  if (!!((obj.value == ((NI) 42)))) goto LA3_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(TM__SRd76hP9cMfCzdUO857UhQQ_3);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA3_: ;
 colontmpD_ = obj;
 mutate__TfI9cchAOeV9cirL3DdZtkVg((&colontmpD_));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 {
  if (!!((obj.value == ((NI) 42)))) goto LA7_;
  failedAssertImpl__W9cjVocn1tjhW7p7xohJj6A(TM__SRd76hP9cMfCzdUO857UhQQ_5);
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }
 LA7_: ;
 }BeforeRet_: ;
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* 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();
 tempDatInit000();
 (*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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 foo__EzBZaa239as9bFx8yeHDoTOw();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__gAP7Gu59agAnSCrqKpcTiRw_.destructor = (void*)NIM_NIL; NTI__gAP7Gu59agAnSCrqKpcTiRw_.size = sizeof(tyObject_AnObject__gAP7Gu59agAnSCrqKpcTiRw);
NTI__gAP7Gu59agAnSCrqKpcTiRw_.name = "|nim.temp.AnObject|RootObj|";
NTI__gAP7Gu59agAnSCrqKpcTiRw_.traceImpl = (void*)NIM_NIL;
NTI__gAP7Gu59agAnSCrqKpcTiRw_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-02-28T12:25:07
  • Finished 2024-02-28T12:25:07
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("AnObject")
      ),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            nnkPostfix.newTree(
              newIdentNode("*"),
              newIdentNode("value")
            ),
            newIdentNode("int"),
            newEmptyNode()
          )
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("mutate"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("a"),
        nnkCommand.newTree(
          newIdentNode("sink"),
          newIdentNode("AnObject")
        ),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("a"),
          newIdentNode("value")
        ),
        newLit(1)
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("foo"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode()
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkVarSection.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("obj"),
          newEmptyNode(),
          nnkObjConstr.newTree(
            newIdentNode("AnObject"),
            nnkExprColonExpr.newTree(
              newIdentNode("value"),
              newLit(42)
            )
          )
        )
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      ),
      nnkCall.newTree(
        newIdentNode("mutate"),
        newIdentNode("obj")
      ),
      nnkCommand.newTree(
        newIdentNode("doAssert"),
        nnkInfix.newTree(
          newIdentNode("=="),
          nnkDotExpr.newTree(
            newIdentNode("obj"),
            newIdentNode("value")
          ),
          newLit(42)
        )
      )
    )
  ),
  nnkCall.newTree(
    newIdentNode("foo")
  )
)
#8d47bf182 ➡️ 🐛

Diagnostics

andreas rumpf introduced a bug at 2022-10-01 16:46:51 +0200 on commit #8d47bf182 with message:

new move analyser2 (#20471)

* produce better code for closure environment creation
* new 'first write' analysis; 
* scope based move analyser
* code cleanup

Co-authored-by: ringabout <[email protected]>

The bug is in the files:

compiler/aliasanalysis.nim
compiler/ast.nim
compiler/ccgcalls.nim
compiler/dfa.nim
compiler/injectdestructors.nim
compiler/int128.nim
compiler/lambdalifting.nim
compiler/parampatterns.nim
compiler/sempass2.nim
compiler/transf.nim
lib/pure/collections/sequtils.nim
tests/arc/tmovebug.nim
tests/arc/topt_no_cursor.nim
tests/destructor/t16607.nim
tests/destructor/tbintree2.nim
tests/destructor/tmove_objconstr.nim
tests/destructor/tprevent_assign2.nim
tests/destructor/tprevent_assign3.nim
tests/destructor/tuse_ownedref_after_move.nim

The bug can be in the commits:

(Diagnostics sometimes off-by-one).

Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 19.1
  • Created 2024-02-28T12:24:24Z
  • Comments 9
  • Commands nim c --gc:arc -d:nimArcDebug -d:nimArcIds --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 11 minutes bisecting 2110 commits at 186 commits per second

from nim.

Araq avatar Araq commented on June 19, 2024

So what should be done here? You cannot pass a subtype to a sink Object? Otherwise we get a sliced copy.

from nim.

arnetheduck avatar arnetheduck commented on June 19, 2024

Otherwise we get a sliced copy.

Broadly, I view slicing copies as the generalisation of a narrowing integer conversion and ideally they should be handled the same way in the language: there should be a compiler error that can be solved by an explicit conversion where needed (same as when you try to convert an int64 to int32).

from nim.

arnetheduck avatar arnetheduck commented on June 19, 2024

Also, in this example there is no slicing so no special casing should be needed, leaving sink to behave unpredictably with respect to "normal" value semantics

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.