Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sink parameters sometimes not copied even when there are later reads (refc) #23354

Closed
gmega opened this issue Feb 26, 2024 · 16 comments
Closed

Comments

@gmega
Copy link
Contributor

gmega commented Feb 26, 2024

Description

While tracking down a bug, I have accidentally bumped into some funny behavior with sink parameters while using refc: namely, that the locations passed to sink parameters are sometimes not copied, even when there are later accesses to those locations at the caller.

Example:

type AnObject* = object of RootObj
  value*: int

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

var obj = AnObject(value: 42)
echo "Value is: ", obj.value
mutate(obj)
echo "Value is: ", obj.value

this, however, works as expected:

type AnObject* = object
  value*: int

I was able to understand this behavior by looking at ccgIntroducedPtr and realizing that object of RootObj is always passed by reference whereas final objects depend on the size, but this is definitely not what I expected.

Nim Version

Nim Compiler Version 1.6.18 [Linux: amd64]
Compiled at 2023-12-15
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: a749a8b742bd0a4272c26a65517275db4720e58a
active boot switches: -d:release

I tried on a number of versions ranging from 1.0.0 to 2.0.2 (+ devel branch), and they all share the same issue.

Current Output

Value is: 42
Value is: 1

Expected Output

Value is: 42
Value is: 42

Possible Solution

I don't understand the compiler well enough to propose a solution but, naively, there seem to be a few ways to go: from disabling pass-by-reference with sink on refc (probably not acceptable as a solution) to repurposing the machinery that's used to the same end by ARC/ORC.

Additional Information

No response

@arnetheduck
Copy link
Contributor

does this also affect 2.0/refc?

@gmega
Copy link
Contributor Author

gmega commented Feb 27, 2024

@arnetheduck yes it does, unfortunately.

@gmega
Copy link
Contributor Author

gmega commented Feb 27, 2024

!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

Copy link
Contributor

🐧 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

@gmega
Copy link
Contributor Author

gmega commented Feb 27, 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.

@gmega
Copy link
Contributor Author

gmega commented Feb 27, 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

Copy link
Contributor

🐧 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

@elcritch
Copy link
Contributor

!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.

@ringabout
Copy link
Member

!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()

@gmega
Copy link
Contributor Author

gmega commented Feb 28, 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.

Copy link
Contributor

🐧 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 <43030857+ringabout@users.noreply.github.com>

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

@ringabout
Copy link
Member

ringabout commented Feb 28, 2024

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

@ringabout
Copy link
Member

ringabout commented Feb 28, 2024

related issues: #22175 #12340 #22173

ringabout added a commit that referenced this issue Feb 29, 2024
Araq pushed a commit that referenced this issue Mar 3, 2024
ref #23354

The new move analyzer requires types that have the tfAsgn flag
(otherwise `lastRead` will return true); tfAsgn is included when the
destructor is not trival. But it should consider the assignement for
objects in this case because objects might have a trival destructors but
it's the assignement that matters when it is passed to sink parameters.
@Araq
Copy link
Member

Araq commented Mar 21, 2024

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

@arnetheduck
Copy link
Contributor

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).

@arnetheduck
Copy link
Contributor

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

narimiran pushed a commit that referenced this issue Apr 22, 2024
ref #23354

The new move analyzer requires types that have the tfAsgn flag
(otherwise `lastRead` will return true); tfAsgn is included when the
destructor is not trival. But it should consider the assignement for
objects in this case because objects might have a trival destructors but
it's the assignement that matters when it is passed to sink parameters.

(cherry picked from commit 572b0b6)
narimiran pushed a commit that referenced this issue Apr 22, 2024
ref #23354

The new move analyzer requires types that have the tfAsgn flag
(otherwise `lastRead` will return true); tfAsgn is included when the
destructor is not trival. But it should consider the assignement for
objects in this case because objects might have a trival destructors but
it's the assignement that matters when it is passed to sink parameters.

(cherry picked from commit 572b0b6)
narimiran pushed a commit that referenced this issue Apr 22, 2024
ref #23354

The new move analyzer requires types that have the tfAsgn flag
(otherwise `lastRead` will return true); tfAsgn is included when the
destructor is not trival. But it should consider the assignement for
objects in this case because objects might have a trival destructors but
it's the assignement that matters when it is passed to sink parameters.

(cherry picked from commit 572b0b6)
narimiran pushed a commit that referenced this issue Apr 22, 2024
ref #23354

The new move analyzer requires types that have the tfAsgn flag
(otherwise `lastRead` will return true); tfAsgn is included when the
destructor is not trival. But it should consider the assignement for
objects in this case because objects might have a trival destructors but
it's the assignement that matters when it is passed to sink parameters.

(cherry picked from commit 572b0b6)
Araq added a commit that referenced this issue Jun 6, 2024
@Araq Araq closed this as completed in 7039b8b Jun 7, 2024
narimiran pushed a commit that referenced this issue Jun 7, 2024
(cherry picked from commit 7039b8b)
arnetheduck added a commit to status-im/nim-eth that referenced this issue Jun 10, 2024
arnetheduck added a commit to status-im/nim-eth that referenced this issue Jun 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants