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

Case object with fields that inherit from RootObj causes SIGSEGV #23920

Open
z------------- opened this issue Aug 3, 2024 · 9 comments
Open

Comments

@z-------------
Copy link

z------------- commented Aug 3, 2024

Description

This code produces SIGSEGV at runtime:

type
  Date = object of RootObj # no bug if not `of RootObj`
  Common = object of RootObj
    name: string
    date: Date
  Foo = object
    name: string
    date: Date # no bug if this field is removed
  Bar = object of Common # no bug if not `of Common`, even if its fields are copied here
  ItemKind = enum
    ikFoo
    ikBar
  Item = object
    case kind: ItemKind
    of ikFoo:
      fooVal: Foo
    of ikBar:
      barVal: Bar
 
# also crashes if the below is wrapped in a main proc
let kind = ikBar # no bug if this is const
let item = Item(kind: kind)

Happens on:

  • devel
  • 2.0.8
  • 1.6.20 with --mm:orc/arc -d:useMalloc

GCC/Clang/-d:release make no difference.

Happens on ORC/ARC. Does not happen on Refc.

Nim Version

Nim Compiler Version 2.1.9 [Linux: amd64]
Compiled at 2024-08-01
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 12b968029159ae05b9813095fbe671e4aa57922b
active boot switches: -d:release

Current Output

Segmentation fault (core dumped)

# with -d:useMalloc:

free(): invalid pointer
Traceback (most recent call last)
<...>/repro.nim(22) repro
SIGABRT: Abnormal termination.

# valgrind:

==1317806== Memcheck, a memory error detector
==1317806== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==1317806== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==1317806== Command: ./repro_malloc_devel_g
==1317806==
==1317806== Invalid free() / delete / delete[] / realloc()
==1317806==    at 0x484317B: free (vg_replace_malloc.c:872)
==1317806==    by 0x109F32: system::deallocImpl(pointer) (malloc.nim:28)
==1317806==    by 0x109F40: system::deallocSharedImpl(pointer) (malloc.nim:45)
==1317806==    by 0x109F4E: deallocShared (memalloc.nim:308)
==1317806==    by 0x10E85E: repro::eqdestroy_(var<repro::Item>) (repro.nim:27)
==1317806==    by 0x10E917: NimMainModule (repro.nim:22)
==1317806==    by 0x10E93E: NimMainInner (excpt.nim:140)
==1317806==    by 0x10E951: NimMain (excpt.nim:151)
==1317806==    by 0x10E973: main (excpt.nim:159)
==1317806==  Address 0x113140 is 0 bytes inside data symbol "NTIv2__n6cF8kktmytyPUtSJ0YOdg_"
==1317806==
==1317806==
==1317806== HEAP SUMMARY:
==1317806==     in use at exit: 0 bytes in 0 blocks
==1317806==   total heap usage: 0 allocs, 1 frees, 0 bytes allocated
==1317806==
==1317806== All heap blocks were freed -- no leaks are possible
==1317806==
==1317806== For lists of detected and suppressed errors, rerun with: -s
==1317806== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Expected Output

No response

Possible Solution

No response

Additional Information

No response

@juancarlospaco
Copy link
Collaborator

!nim c --gc:orc

type
  Date = object of RootObj # no bug if not `of RootObj`
  Common = object of RootObj
    name: string
    date: Date
  Foo = object
    name: string
    date: Date # no bug if this field is removed
  Bar = object of Common # no bug if not `of Common`, even if its fields are copied here
  ItemKind = enum
    ikFoo
    ikBar
  Item = object
    case kind: ItemKind
    of ikFoo:
      fooVal: Foo
    of ikBar:
      barVal: Bar
 
# also crashes if the below is wrapped in a main proc
let kind = ikBar # no bug if this is const
let item = Item(kind: kind)

Copy link
Contributor

github-actions bot commented Aug 3, 2024

🐧 Linux bisect by @juancarlospaco (collaborator)
devel 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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]
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 98.13 Kb (100,480 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u5021)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4805;
extern NIM_THREADVAR TFrame* framePtr__system_u2655;
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_u4805);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 default: __builtin_unreachable();
 }
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2655 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2655).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2655;
 framePtr__system_u2655 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u5021();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2655 = (*framePtr__system_u2655).prev;
}
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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u43((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-03T15:32:09
  • Finished 2024-08-03T15:32:10
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
stable 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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]
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(682, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 98.08 Kb (100,432 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u5034)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4816;
extern NIM_THREADVAR TFrame* framePtr__system_u4473;
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_u4816);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 default: __builtin_unreachable();
 }
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4473 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4473).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4473;
 framePtr__system_u4473 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u5034();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4473 = (*framePtr__system_u4473).prev;
}
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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u43((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-03T15:32:14
  • Finished 2024-08-03T15:32:14
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
2.0.4 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 95.95 Kb (98,248 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u5035)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
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_u4817);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4434 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4434).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4434;
 framePtr__system_u4434 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u5035();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4434 = (*framePtr__system_u4434).prev;
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u43((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-03T15:32:17
  • Finished 2024-08-03T15:32:18
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
2.0.0 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 95.95 Kb (98,248 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u5021)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4803;
extern NIM_THREADVAR TFrame* framePtr__system_u4420;
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_u4803);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u43)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4420 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4420).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4420;
 framePtr__system_u4420 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u5021();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4420 = (*framePtr__system_u4420).prev;
}
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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u43((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-03T15:32:21
  • Finished 2024-08-03T15:32:22
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
1.6.20 👍 OK

Output


IR

Compiled filesize 90.41 Kb (92,584 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u33)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___system_u3679)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4838)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u4667;
extern TFrame* framePtr__system_u4316;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(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_u4667);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u33)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
  eqdestroy___system_u3679((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
  eqdestroy___system_u3679((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_u4316 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_u4316).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_u4316;
 framePtr__system_u4316 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_u4838();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4316 = (*framePtr__system_u4316).prev;
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u33((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-03T15:32:25
  • Finished 2024-08-03T15:32:25
  • Duration
1.4.8 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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 90.41 Kb (92,584 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u33)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___system_u3679)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4838)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u4667;
extern TFrame* framePtr__system_u4316;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(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_u4667);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u33)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
  eqdestroy___system_u3679((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
  eqdestroy___system_u3679((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_u4316 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_u4316).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_u4316;
 framePtr__system_u4316 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_u4838();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4316 = (*framePtr__system_u4316).prev;
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u33((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-03T15:32:27
  • Finished 2024-08-03T15:32:27
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
1.2.18 👍 OK

Output


IR

Compiled filesize 78.19 Kb (80,064 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {
RootObj Sup;
};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {
RootObj Sup;
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {
tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;
};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {
tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
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 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;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));
 nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;
 item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-03T15:32:30
  • Finished 2024-08-03T15:32:30
  • Duration
1.0.10 👎 FAIL

Output

Error: Command failed: nim c --gc:orc -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 'orc' found

IR

Compiled filesize 78.19 Kb (80,064 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {
RootObj Sup;
};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {
RootObj Sup;
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {
tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;
};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {
tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
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 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;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));
 nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;
 item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-03T15:32:32
  • Finished 2024-08-03T15:32:32
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
#fbc697592 ➡️ 🐛

Diagnostics

andreas rumpf introduced a bug at 2022-10-09 11:44:02 +0200 on commit #fbc697592 with message:

threaded alloc (#20492)

* allocator: catch up with multi-threading techniques
* removed the global thread lock
* more atomics for fun and profit
* added important sysAssert
* stats remain thread local and don't have to be atomic
* undo split chunk optimizations in the hope it makes the CI happy

The bug is in the files:

lib/system/alloc.nim
lib/system/atomics.nim
lib/system/threads.nim

The bug can be in the commits:

(Diagnostics sometimes off-by-one).

Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.4
  • Created 2024-08-03T15:31:38Z
  • Comments 1
  • Commands nim c --gc:orc -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 33 minutes bisecting 2364 commits at 70 commits per second

@juancarlospaco
Copy link
Collaborator

@Araq See #23920 (comment) the that PR introduced bug is #20492

@ringabout
Copy link
Member

!nim c --gc:arc

type
  Date = object of RootObj # no bug if not `of RootObj`
  Common = object of RootObj
    name: string
    date: Date
  Foo = object
    name: string
    date: Date # no bug if this field is removed
  Bar = object of Common # no bug if not `of Common`, even if its fields are copied here
  ItemKind = enum
    ikFoo
    ikBar
  Item = object
    case kind: ItemKind
    of ikFoo:
      fooVal: Foo
    of ikBar:
      barVal: Bar
 
# also crashes if the below is wrapped in a main proc
let kind = ikBar # no bug if this is const
let item = Item(kind: kind)

@ringabout ringabout self-assigned this Aug 12, 2024
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]
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-#devel/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 88.68 Kb (90,808 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4176)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3986;
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(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (&nimInErrorMode__system_u3986);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 default: __builtin_unreachable();
 }
}
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_u4176();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2625 = (*framePtr__system_u2625).prev;
}
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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u40((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-12T14:03:15
  • Finished 2024-08-12T14:03:16
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
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]
command line(1, 2) Warning: `gc:option` is deprecated; use `mm:option` instead [Deprecated]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(682, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 84.63 Kb (86,664 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4170)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3978;
extern NIM_THREADVAR TFrame* framePtr__system_u3653;
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_u3978);
 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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 default: __builtin_unreachable();
 }
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u3653 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s_p0).calldepth = ((NI16)0);
 }
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3653).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u3653;
 framePtr__system_u3653 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4170();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u3653 = (*framePtr__system_u3653).prev;
}
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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u40((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-12T14:03:20
  • Finished 2024-08-12T14:03:21
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
2.0.4 👎 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]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 82.60 Kb (84,584 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_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, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3981;
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 }
}
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 void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u40((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-12T14:03:24
  • Finished 2024-08-12T14:03:24
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
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]
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim dealloc
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim rawDealloc
/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/alloc.nim addToSharedFreeListBigChunks
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
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 82.49 Kb (84,472 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
 NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_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, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3967;
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {
 switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {
  if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_1.fooVal.name.p);
}
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {
  if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) {
deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);
}
 }
 break;
 }
}
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 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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u40((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-08-12T14:03:27
  • Finished 2024-08-12T14:03:28
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
1.6.20 👍 OK

Output


IR

Compiled filesize 77.06 Kb (78,912 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u30)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___system_u3021)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4055)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u3906;
extern TFrame* framePtr__system_u3581;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(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_u3906);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u30)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
  eqdestroy___system_u3021((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
  eqdestroy___system_u3021((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_u3581 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_u3581).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_u3581;
 framePtr__system_u3581 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_u4055();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u3581 = (*framePtr__system_u3581).prev;
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u30((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-12T14:03:30
  • Finished 2024-08-12T14:03:31
  • 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 77.06 Kb (78,912 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {
RootObj Sup;
};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {
RootObj Sup;
NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {
tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;
};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u30)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___system_u3021)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4055)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u3906;
extern TFrame* framePtr__system_u3581;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(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_u3906);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u30)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
  eqdestroy___system_u3021((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
  eqdestroy___system_u3021((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_u3581 == ((TFrame*) NIM_NIL))) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_u3581).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_u3581;
 framePtr__system_u3581 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
  callDepthLimitReached__system_u4055();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u3581 = (*framePtr__system_u3581).prev;
}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__temp_u19;
 item__temp_u20.kind = colontmpD_;
 eqdestroy___temp_u30((&item__temp_u20));
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-12T14:03:33
  • Finished 2024-08-12T14:03:33
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
1.2.18 👍 OK

Output


IR

Compiled filesize 72.80 Kb (74,552 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {
RootObj Sup;
};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {
RootObj Sup;
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {
tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;
};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {
tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
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 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;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));
 nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;
 item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-12T14:03:35
  • Finished 2024-08-12T14:03:36
  • 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 72.80 Kb (74,552 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {
RootObj Sup;
};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {
RootObj Sup;
NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {
tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;
};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {
tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
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 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;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));
 nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;
 item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-12T14:03:37
  • Finished 2024-08-12T14:03:37
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
#fbc697592 ➡️ 🐛

Diagnostics

andreas rumpf introduced a bug at 2022-10-09 11:44:02 +0200 on commit #fbc697592 with message:

threaded alloc (#20492)

* allocator: catch up with multi-threading techniques
* removed the global thread lock
* more atomics for fun and profit
* added important sysAssert
* stats remain thread local and don't have to be atomic
* undo split chunk optimizations in the hope it makes the CI happy

The bug is in the files:

lib/system/alloc.nim
lib/system/atomics.nim
lib/system/threads.nim

The bug can be in the commits:

(Diagnostics sometimes off-by-one).

Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.4
  • Created 2024-08-12T14:01:58Z
  • Comments 4
  • 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 bisecting 2377 commits at 12253 commits per second

@juancarlospaco
Copy link
Collaborator

Bisect diagnostic seems consistent(?), points to the same PR...

@ringabout
Copy link
Member

ringabout commented Aug 13, 2024

Bisect diagnostic seems consistent(?), points to the same PR...

oh, shit. I made a mistake. I meant to test -d:useMalloc

@ringabout
Copy link
Member

!nim c --gc:arc -d:useMalloc

type
  Date = object of RootObj # no bug if not `of RootObj`
  Common = object of RootObj
    name: string
    date: Date
  Foo = object
    name: string
    date: Date # no bug if this field is removed
  Bar = object of Common # no bug if not `of Common`, even if its fields are copied here
  ItemKind = enum
    ikFoo
    ikBar
  Item = object
    case kind: ItemKind
    of ikFoo:
      fooVal: Foo
    of ikBar:
      barVal: Bar
 
# also crashes if the below is wrapped in a main proc
let kind = ikBar # no bug if this is const
let item = Item(kind: kind)

Copy link
Contributor

🐧 Linux bisect by @ringabout (member)
devel 👍 OK

Output


IR

Compiled filesize 354.98 Kb (363,496 bytes)
#define FX_0 "/home/runner/.choosenim/toolchains/nim-#devel/config/nim.cfg"
#define FX_1 "/home/runner/.choosenim/toolchains/nim-#devel/config/config.nims"
#define FX_2 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system.nim"
#define FX_3 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/basic_types.nim"
#define FX_4 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/compilation.nim"
#define FX_5 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/arithmetics.nim"
#define FX_6 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/comparisons.nim"
#define FX_7 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/inclrtl.nim"
#define FX_8 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/exceptions.nim"
#define FX_9 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/setops.nim"
#define FX_10 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/since.nim"
#define FX_11 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/ctypes.nim"
#define FX_12 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/rawquits.nim"
#define FX_13 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/memalloc.nim"
#define FX_14 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/iterators_1.nim"
#define FX_15 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/fatal.nim"
#define FX_16 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/assertions.nim"
#define FX_17 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/miscdollars.nim"
#define FX_18 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/digitsutils.nim"
#define FX_19 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/iterators.nim"
#define FX_20 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/gc_interface.nim"
#define FX_21 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/coro_detection.nim"
#define FX_22 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/dollars.nim"
#define FX_23 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/formatfloat.nim"
#define FX_24 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/dragonbox.nim"
#define FX_25 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/schubfach.nim"
#define FX_26 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/objectdollar.nim"
#define FX_27 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/indices.nim"
#define FX_28 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/nimscript.nim"
#define FX_29 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/widestrs.nim"
#define FX_30 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/syncio.nim"
#define FX_31 "/home/runner/work/Nim/Nim/temp.nim"
#define FX_32 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/hti.nim"
#define FX_33 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/sysatomics.nim"
#define FX_34 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/bitmasks.nim"
#define FX_35 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/ansi_c.nim"
#define FX_36 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/memory.nim"
#define FX_37 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/syslocks.nim"
#define FX_38 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/threadlocalstorage.nim"
#define FX_39 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/threadtypes.nim"
#define FX_40 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/strs_v2.nim"
#define FX_41 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/seqs_v2.nim"
#define FX_42 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/arc.nim"
#define FX_43 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/cellsets.nim"
#define FX_44 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/threadimpl.nim"
#define FX_45 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/typedthreads.nim"
#define FX_46 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/threadids.nim"
#define FX_47 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/excpt.nim"
#define FX_48 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/stacktraces.nim"
#define FX_49 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/chcks.nim"
#define FX_50 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/indexerrors.nim"
#define FX_51 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/integerops.nim"
#define FX_52 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/dyncalls.nim"
#define FX_53 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/countbits_impl.nim"
#define FX_54 "/home/runner/.choosenim/toolchains/nim-#devel/lib/std/private/bitops_utils.nim"
#define FX_55 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/sets.nim"
#define FX_56 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/mmdisp.nim"
#define FX_57 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/mm/malloc.nim"
#define FX_58 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/strmantle.nim"
#define FX_59 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/assign.nim"
#define FX_60 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/seqs_v2_reimpl.nim"
#define FX_61 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/channels_builtin.nim"
#define FX_62 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/repr_v2.nim"
#define FX_63 "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/deepcopy.nim"
#define FX_64 "/home/runner/.choosenim/toolchains/nim-#devel/lib/nimhcr.nim"
#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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {	NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {	NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {	tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, _ZN6system21callDepthLimitReachedE)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3983;
extern NIM_THREADVAR TFrame* framePtr__system_u2622;
#line 19 FX_36
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2) {	void* T1_;
#line 21 FX_36
 T1_ = (void*)0;	T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));}
#line 444 FX_47
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;
#line 445 FX_47
 result = (&nimInErrorMode__system_u3983);	return result;}
#line 30 FX_36
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31 FX_36
 _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 FX_31
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {	switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {		if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_1.fooVal.name.p);}	}
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {		if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);}	}
 break;
 default: __builtin_unreachable();
 }
}
#line 570 FX_47
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
#line 571 FX_47
 {		if (!(framePtr__system_u2622 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 572 FX_47
  (*s_p0).calldepth = ((NI16)0);	}
 goto LA1_;
LA3_: ;
 {
#line 575 FX_47
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2622).calldepth + ((NI16)1));	}
LA1_: ;
#line 577 FX_47
 (*s_p0).prev = framePtr__system_u2622;
#line 578 FX_47
 framePtr__system_u2622 = s_p0;
#line 579 FX_47
 {		if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  _ZN6system21callDepthLimitReachedE();
 }
LA8_: ;
}
#line 118 FX_47
static N_INLINE(void, popFrame)(void) {
#line 119 FX_47
 framePtr__system_u2622 = (*framePtr__system_u2622).prev;}
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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 FX_31
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;	nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;	colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;	_ZN4temp10eqdestroy_E3varIN4temp4ItemEE((&item__temp_u20));
 nimTestErrorFlag();	popFrame();}
}

Stats

  • Started 2024-08-13T00:08:36
  • Finished 2024-08-13T00:08:38
  • Duration 1 minutes
stable 👍 OK

Output


IR

Compiled filesize 353.14 Kb (361,616 bytes)
#define FX_0 "/home/runner/.choosenim/toolchains/nim-2.0.8/config/nim.cfg"
#define FX_1 "/home/runner/.choosenim/toolchains/nim-2.0.8/config/config.nims"
#define FX_2 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system.nim"
#define FX_3 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/basic_types.nim"
#define FX_4 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/compilation.nim"
#define FX_5 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/arithmetics.nim"
#define FX_6 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/comparisons.nim"
#define FX_7 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/inclrtl.nim"
#define FX_8 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/exceptions.nim"
#define FX_9 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/setops.nim"
#define FX_10 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/since.nim"
#define FX_11 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/ctypes.nim"
#define FX_12 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/rawquits.nim"
#define FX_13 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/memalloc.nim"
#define FX_14 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/iterators_1.nim"
#define FX_15 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/fatal.nim"
#define FX_16 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/assertions.nim"
#define FX_17 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/miscdollars.nim"
#define FX_18 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/digitsutils.nim"
#define FX_19 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/iterators.nim"
#define FX_20 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/gc_interface.nim"
#define FX_21 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/coro_detection.nim"
#define FX_22 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/dollars.nim"
#define FX_23 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/formatfloat.nim"
#define FX_24 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/dragonbox.nim"
#define FX_25 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/schubfach.nim"
#define FX_26 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/objectdollar.nim"
#define FX_27 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/indices.nim"
#define FX_28 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/nimscript.nim"
#define FX_29 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/widestrs.nim"
#define FX_30 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/syncio.nim"
#define FX_31 "/home/runner/work/Nim/Nim/temp.nim"
#define FX_32 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/hti.nim"
#define FX_33 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/cgprocs.nim"
#define FX_34 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/sysatomics.nim"
#define FX_35 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/bitmasks.nim"
#define FX_36 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/ansi_c.nim"
#define FX_37 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/memory.nim"
#define FX_38 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/syslocks.nim"
#define FX_39 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/threadlocalstorage.nim"
#define FX_40 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/threadtypes.nim"
#define FX_41 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/strs_v2.nim"
#define FX_42 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/seqs_v2.nim"
#define FX_43 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/arc.nim"
#define FX_44 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/cellsets.nim"
#define FX_45 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/threadimpl.nim"
#define FX_46 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/typedthreads.nim"
#define FX_47 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/threadids.nim"
#define FX_48 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/excpt.nim"
#define FX_49 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/stacktraces.nim"
#define FX_50 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/chcks.nim"
#define FX_51 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/indexerrors.nim"
#define FX_52 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/integerops.nim"
#define FX_53 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/dyncalls.nim"
#define FX_54 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/countbits_impl.nim"
#define FX_55 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/std/private/bitops_utils.nim"
#define FX_56 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/sets.nim"
#define FX_57 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/mmdisp.nim"
#define FX_58 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/mm/malloc.nim"
#define FX_59 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/strmantle.nim"
#define FX_60 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/assign.nim"
#define FX_61 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/seqs_v2_reimpl.nim"
#define FX_62 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/channels_builtin.nim"
#define FX_63 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/repr_v2.nim"
#define FX_64 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/system/deepcopy.nim"
#define FX_65 "/home/runner/.choosenim/toolchains/nim-2.0.8/lib/nimhcr.nim"
#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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {	NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {	NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {	tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, _ZN3nim10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, _ZN6system21callDepthLimitReachedE)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3975;
extern NIM_THREADVAR TFrame* framePtr__system_u3650;
#line 19 FX_37
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2) {	void* T1_;
#line 21 FX_37
 T1_ = (void*)0;	T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));}
#line 440 FX_48
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;
#line 441 FX_48
 result = (&nimInErrorMode__system_u3975);	return result;}
#line 30 FX_37
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31 FX_37
 _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 FX_31
N_LIB_PRIVATE N_NIMCALL(void, _ZN3nim10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {	switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {		if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_1.fooVal.name.p);}	}
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {		if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);}	}
 break;
 default: __builtin_unreachable();
 }
}
#line 566 FX_48
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
#line 567 FX_48
 {		if (!(framePtr__system_u3650 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 568 FX_48
  (*s_p0).calldepth = ((NI16)0);	}
 goto LA1_;
LA3_: ;
 {
#line 571 FX_48
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3650).calldepth + ((NI16)1));	}
LA1_: ;
#line 573 FX_48
 (*s_p0).prev = framePtr__system_u3650;
#line 574 FX_48
 framePtr__system_u3650 = s_p0;
#line 575 FX_48
 {		if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  _ZN6system21callDepthLimitReachedE();
 }
LA8_: ;
}
#line 114 FX_48
static N_INLINE(void, popFrame)(void) {
#line 115 FX_48
 framePtr__system_u3650 = (*framePtr__system_u3650).prev;}
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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot8atslibatssystemdotnim_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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 FX_31
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;NIM_BOOL* nimErr_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");nimErr_ = nimErrorFlag();	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;	nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;	colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;	_ZN3nim10eqdestroy_E3varIN4temp4ItemEE((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	BeforeRet_: ;
 nimTestErrorFlag();	popFrame();}
}

Stats

  • Started 2024-08-13T00:08:41
  • Finished 2024-08-13T00:08:42
  • Duration 1 minutes
2.0.4 👍 OK

Output


IR

Compiled filesize 315.68 Kb (323,256 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {	NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {	NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {	tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, _ZN6system21callDepthLimitReachedE)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3978;
extern NIM_THREADVAR TFrame* framePtr__system_u3616;
#line 19 "/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/memory.nim"
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a_p0, int v_p1, NI size_p2) {	void* T1_;
#line 21
 T1_ = (void*)0;	T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));}
#line 423 "/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;
#line 424
 result = (&nimInErrorMode__system_u3978);	return result;}
#line 30 "/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31
 _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {	switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {		if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_1.fooVal.name.p);}	}
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {		if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);}	}
 break;
 }
}
#line 549 "/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
#line 550
 {		if (!(framePtr__system_u3616 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 551
  (*s_p0).calldepth = ((NI16)0);	}
 goto LA1_;
LA3_: ;
 {
#line 554
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3616).calldepth + ((NI16)1));	}
LA1_: ;
#line 556
 (*s_p0).prev = framePtr__system_u3616;
#line 557
 framePtr__system_u3616 = s_p0;
#line 558
 {		if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  _ZN6system21callDepthLimitReachedE();
 }
LA8_: ;
}
#line 99 "/home/runner/.choosenim/toolchains/nim-2.0.4/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 100
 framePtr__system_u3616 = (*framePtr__system_u3616).prev;}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;NIM_BOOL* nimErr_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");nimErr_ = nimErrorFlag();	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;	nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;	colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;	_ZN4temp10eqdestroy_E3varIN4temp4ItemEE((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	BeforeRet_: ;
 nimTestErrorFlag();	popFrame();}
}

Stats

  • Started 2024-08-13T00:08:45
  • Finished 2024-08-13T00:08:47
  • Duration 1 minutes
2.0.0 👍 OK

Output


IR

Compiled filesize 311.63 Kb (319,112 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {	NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {	NI len;
 NimStrPayload* p;
};
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_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;	NimStringV2 name;
 tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {	tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {	tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {	tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4156)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {3701606400, 4052065280};
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .align = (NI16) NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_3, .traceImpl = (void*)NIM_NIL, .flags = 0};
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1);
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u3964;
extern NIM_THREADVAR TFrame* framePtr__system_u3602;
#line 19 "/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/memory.nim"
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2) {	void* T1_;
#line 21
 T1_ = (void*)0;	T1_ = memset(a_p0, v_p1, ((size_t) (size_p2)));}
#line 423 "/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;	result = (NIM_BOOL*)0;
#line 424
 result = (&nimInErrorMode__system_u3964);	return result;}
#line 30 "/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u40)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest_p0) {	switch ((*dest_p0).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0):
 {		if ((*dest_p0)._kind_1.fooVal.name.p && !((*dest_p0)._kind_1.fooVal.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_1.fooVal.name.p);}	}
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)1):
 {		if ((*dest_p0)._kind_2.barVal.Sup.name.p && !((*dest_p0)._kind_2.barVal.Sup.name.p->cap & NIM_STRLIT_FLAG)) { deallocShared((*dest_p0)._kind_2.barVal.Sup.name.p);}	}
 break;
 }
}
#line 549 "/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
#line 550
 {		if (!(framePtr__system_u3602 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 551
  (*s_p0).calldepth = ((NI16)0);	}
 goto LA1_;
LA3_: ;
 {
#line 554
  (*s_p0).calldepth = (NI16)((*framePtr__system_u3602).calldepth + ((NI16)1));	}
LA1_: ;
#line 556
 (*s_p0).prev = framePtr__system_u3602;
#line 557
 framePtr__system_u3602 = s_p0;
#line 558
 {		if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
  callDepthLimitReached__system_u4156();
 }
LA8_: ;
}
#line 99 "/home/runner/.choosenim/toolchains/nim-2.0.0/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 100
 framePtr__system_u3602 = (*framePtr__system_u3602).prev;}
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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;NIM_BOOL* nimErr_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");nimErr_ = nimErrorFlag();	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;	nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;	colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;	eqdestroy___temp_u40((&item__temp_u20));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	BeforeRet_: ;
 nimTestErrorFlag();	popFrame();}
}

Stats

  • Started 2024-08-13T00:08:49
  • Finished 2024-08-13T00:08:50
  • Duration 1 minutes
1.6.20 👍 OK

Output


IR

Compiled filesize 311.43 Kb (318,904 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {TNimTypeV2* m_type;};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, _ZN6system10eqdestroy_E3varI6stringE)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, _ZN6system21callDepthLimitReachedE)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u3906;
extern TFrame* framePtr__system_u3581;
#line 19 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a, int v, NI size) {	void* T1_;
#line 21 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
#line 21 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
 T1_ = (void*)0;	T1_ = memset(a, v, ((size_t) (size)));}
#line 423 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	
#line 423 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
NIM_BOOL* result;	result = (NIM_BOOL*)0;
#line 424 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 424 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 result = (&nimInErrorMode__system_u3906);	return result;}
#line 30 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p, NI size) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
#line 31 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
 _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  _ZN6system10eqdestroy_E3varI6stringE((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  _ZN6system10eqdestroy_E3varI6stringE((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
#line 549 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s) {
#line 550 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 {
#line 550 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  if (!(framePtr__system_u3581 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 551 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 551 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  (*s).calldepth = ((NI16) 0);	}
 goto LA1_;
 LA3_: ;
 {
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  (*s).calldepth = (NI16)((*framePtr__system_u3581).calldepth + ((NI16) 1));	}
 LA1_: ;
#line 556 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 556 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 (*s).prev = framePtr__system_u3581;
#line 557 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 557 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 framePtr__system_u3581 = s;
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 {
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  _ZN6system21callDepthLimitReachedE();
 }
 LA8_: ;
}
#line 99 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 100 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 100 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 framePtr__system_u3581 = (*framePtr__system_u3581).prev;}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 _ZN4temp10eqdestroy_E3varIN4temp4ItemEE((&item__temp_u20));
 nimTestErrorFlag();	popFrame();}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
#line 999999 "generated_not_to_break_here"
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-13T00:08:53
  • Finished 2024-08-13T00:08:54
  • Duration 1 minutes
1.4.8 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:useMalloc -d:nimArcDebug -d:nimArcIds  -d:nimAllocPagesViaMalloc -d:useSysAssert -d:useGcAssert -d:nimLeakDetector --debugger:native --debuginfo:on  -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 && valgrind /home/runner/work/Nim/Nim/temp
/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 311.43 Kb (318,904 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_Item__yXD9anOLmn4v86TEhWhSBJg tyObject_Item__yXD9anOLmn4v86TEhWhSBJg;
typedef struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ;
typedef struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA tyObject_Common__rUHLCncMSBDUMeODfFpjZA;
typedef NU8 tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ;
struct NimStrPayload {NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {NI len;
NimStrPayload* p;
};
struct TNimTypeV2 {void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {TNimTypeV2* m_type;};
struct tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw {  RootObj Sup;};
struct tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw {NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Common__rUHLCncMSBDUMeODfFpjZA {  RootObj Sup;NimStringV2 name;
tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw date;
};
struct tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ {  tyObject_Common__rUHLCncMSBDUMeODfFpjZA Sup;};
struct tyObject_Item__yXD9anOLmn4v86TEhWhSBJg {tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind;
union{
struct {tyObject_Foo__DU1MGHNn9cEFbBHuJSQfqbw fooVal;
} _kind_1;
struct {tyObject_Bar__t1pbcCziE9bmFOmTZ7jlKdQ barVal;
} _kind_2;
};
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest);
N_LIB_PRIVATE N_NIMCALL(void, _ZN6system10eqdestroy_E3varI6stringE)(NimStringV2* dest);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, _ZN6system21callDepthLimitReachedE)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_;
static NIM_CONST tyObject_Item__yXD9anOLmn4v86TEhWhSBJg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__yXD9anOLmn4v86TEhWhSBJg item__temp_u20;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ kind__temp_u19 = ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1);
extern NIM_BOOL nimInErrorMode__system_u3906;
extern TFrame* framePtr__system_u3581;
#line 19 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
static N_INLINE(void, _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807)(void* a, int v, NI size) {	void* T1_;
#line 21 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
#line 21 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
 T1_ = (void*)0;	T1_ = memset(a, v, ((size_t) (size)));}
#line 423 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	
#line 423 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
NIM_BOOL* result;	result = (NIM_BOOL*)0;
#line 424 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 424 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 result = (&nimInErrorMode__system_u3906);	return result;}
#line 30 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p, NI size) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 31 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
#line 31 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/memory.nim"
 _ZN6memory9nimSetMemE7pointer5int3225range09223372036854775807(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, _ZN4temp10eqdestroy_E3varIN4temp4ItemEE)(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg* dest) {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 0):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  _ZN6system10eqdestroy_E3varI6stringE((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ) 1):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  _ZN6system10eqdestroy_E3varI6stringE((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
#line 549 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s) {
#line 550 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 {
#line 550 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  if (!(framePtr__system_u3581 == ((TFrame*) NIM_NIL))) goto LA3_;
#line 551 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 551 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  (*s).calldepth = ((NI16) 0);	}
 goto LA1_;
 LA3_: ;
 {
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 554 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  (*s).calldepth = (NI16)((*framePtr__system_u3581).calldepth + ((NI16) 1));	}
 LA1_: ;
#line 556 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 556 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 (*s).prev = framePtr__system_u3581;
#line 557 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 557 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 framePtr__system_u3581 = s;
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 {
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 558 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
  _ZN6system21callDepthLimitReachedE();
 }
 LA8_: ;
}
#line 99 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 100 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
#line 100 "/home/runner/.choosenim/toolchains/nim-1.6.20/lib/system/excpt.nim"
 framePtr__system_u3581 = (*framePtr__system_u3581).prev;}
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) {
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ colontmpD_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");	colontmpD_ = (tyEnum_ItemKind__5E0exjfQS8tDcybVpZQ8DQ)0;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 nimZeroMem((void*)(&item__temp_u20), sizeof(tyObject_Item__yXD9anOLmn4v86TEhWhSBJg));	item__temp_u20 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 colontmpD_ = kind__temp_u19;	item__temp_u20.kind = colontmpD_;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 _ZN4temp10eqdestroy_E3varIN4temp4ItemEE((&item__temp_u20));
 nimTestErrorFlag();	popFrame();}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
#line 999999 "generated_not_to_break_here"
NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.destructor = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.size = sizeof(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.align = NIM_ALIGNOF(tyObject_Date__WfGFnNj9b4WJX3ny9bH9buuyw); NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.name = "|nim.temp.Date|RootObj|";
; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.traceImpl = (void*)NIM_NIL; NTIv2__WfGFnNj9b4WJX3ny9bH9buuyw_.flags = 0;}

Stats

  • Started 2024-08-13T00:08:56
  • Finished 2024-08-13T00:08:56
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
1.2.18 👍 OK

Output


IR

Compiled filesize 243.41 Kb (249,248 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {NI len;
NimStrPayload* p;
};
struct TNimType {void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {TNimType* m_type;};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {  RootObj Sup;};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {  RootObj Sup;NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {  tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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;
#line 22 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {	void* T1_;
#line 24 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
#line 24 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
 T1_ = (void*)0;	T1_ = memset(a, v, ((size_t) (size)));}
#line 415 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;	result = (NIM_BOOL*)0;
#line 416 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);	return result;}
#line 33 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p, NI size) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 34 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
#line 34 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
#line 2093 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system.nim"
static N_INLINE(void, initStackBottomWith)(void* locals) {}
#line 532 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s) {
#line 533 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 {
#line 533 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
#line 534 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  (*s).calldepth = ((NI16) 0);	}
 goto LA1_;
 LA3_: ;
 {
#line 537 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
#line 537 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));	}
 LA1_: ;
#line 539 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
#line 540 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 {
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
#line 83 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 84 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;}
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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;NIM_BOOL* nimErr_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");nimErr_ = nimErrorFlag();	colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));	nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));	item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;	item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	BeforeRet_: ;
 nimTestErrorFlag();	popFrame();}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
#line 999999 "generated_not_to_break_here"
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-13T00:08:59
  • Finished 2024-08-13T00:09:00
  • Duration
1.0.10 👎 FAIL

Output

Error: Command failed: nim c --gc:arc -d:useMalloc -d:nimArcDebug -d:nimArcIds  -d:nimAllocPagesViaMalloc -d:useSysAssert -d:useGcAssert -d:nimLeakDetector --debugger:native --debuginfo:on  -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 && valgrind /home/runner/work/Nim/Nim/temp
command line(1, 2) Error: 'none', 'boehm' or 'refc' expected, but 'arc' found

IR

Compiled filesize 243.41 Kb (249,248 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_Item__WOSegQZ0Dp7yGjGbb9bHzpA tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA;
typedef struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA;
typedef struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ;
typedef NU8 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA;
struct NimStrPayload {NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {NI len;
NimStrPayload* p;
};
struct TNimType {void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {TNimType* m_type;};
struct tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g {  RootObj Sup;};
struct tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w {NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ {  RootObj Sup;NimStringV2 name;
tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g date;
};
struct tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA {  tyObject_Common__XFcLMAK0zBnCVqdSee6UrQ Sup;};
struct tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA {tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind;
union{
struct {tyObject_Foo__waNMdVW6mQEjLtse9c3kN2w fooVal;
} _kind_1;
struct {tyObject_Bar__iaNDm3Mu4rrBzJCE9ajoSpA barVal;
} _kind_2;
};
};
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ)(NimStringV2* dest);
static N_INLINE(void, initStackBottomWith)(void* locals);
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, 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__dxnpG8JDYv9c2JljM1Bg18g_;
static NIM_CONST tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {0, {._kind_1 = {{{0, NIM_NIL}, {{(&NTI__dxnpG8JDYv9c2JljM1Bg18g_)}}}}}}
;
N_LIB_PRIVATE tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA item__ehcGyqlmD3VdWzM9czyS5zw;
N_LIB_PRIVATE NIM_CONST tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA kind__qrZZ9bjcH9cJxHzlZVumBlng = ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1);
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;
#line 22 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {	void* T1_;
#line 24 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
#line 24 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
 T1_ = (void*)0;	T1_ = memset(a, v, ((size_t) (size)));}
#line 415 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {	NIM_BOOL* result;	result = (NIM_BOOL*)0;
#line 416 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);	return result;}
#line 33 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
static N_INLINE(void, nimZeroMem)(void* p, NI size) {NIM_BOOL* nimErr_;{nimErr_ = nimErrorFlag();
#line 34 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
#line 34 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/memory.nim"
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	}BeforeRet_: ;
}
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg)(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA* dest) {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 switch ((*dest).kind) {
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 0):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_1.fooVal.name));
 }
 break;
 case ((tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA) 1):
 {
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
  eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&(*dest)._kind_2.barVal.Sup.name));
 }
 break;
 }
}
#line 2093 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system.nim"
static N_INLINE(void, initStackBottomWith)(void* locals) {}
#line 532 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(void, nimFrame)(TFrame* s) {
#line 533 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 {
#line 533 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
#line 534 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  (*s).calldepth = ((NI16) 0);	}
 goto LA1_;
 LA3_: ;
 {
#line 537 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
#line 537 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));	}
 LA1_: ;
#line 539 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
#line 540 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 {
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
#line 541 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
#line 83 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
static N_INLINE(void, popFrame)(void) {
#line 84 "/home/runner/.choosenim/toolchains/nim-1.2.18/lib/system/excpt.nim"
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;}
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) {
#line 999999 "generated_not_to_break_here"
{
 TFrame FR_; FR_.len = 0;
 item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;}
{
 tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA colontmpD_;NIM_BOOL* nimErr_;	nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");nimErr_ = nimErrorFlag();	colontmpD_ = (tyEnum_ItemKind__S29aBJKdwzSX8tAFZ7xTM9cA)0;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 chckNil((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw));	nimZeroMem((void*)(&item__ehcGyqlmD3VdWzM9czyS5zw), sizeof(tyObject_Item__WOSegQZ0Dp7yGjGbb9bHzpA));	item__ehcGyqlmD3VdWzM9czyS5zw = TM__SRd76hP9cMfCzdUO857UhQQ_2;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 colontmpD_ = kind__qrZZ9bjcH9cJxHzlZVumBlng;	item__ehcGyqlmD3VdWzM9czyS5zw.kind = colontmpD_;
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
#line 21 "/home/runner/work/Nim/Nim/temp.nim"
 eqdestroy___tsBNz4x5qFTZ1neuJ9aD3bg((&item__ehcGyqlmD3VdWzM9czyS5zw));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;	BeforeRet_: ;
 nimTestErrorFlag();	popFrame();}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
#line 999999 "generated_not_to_break_here"
NTI__dxnpG8JDYv9c2JljM1Bg18g_.destructor = (void*)NIM_NIL; NTI__dxnpG8JDYv9c2JljM1Bg18g_.size = sizeof(tyObject_Date__dxnpG8JDYv9c2JljM1Bg18g);
NTI__dxnpG8JDYv9c2JljM1Bg18g_.name = "|nim.temp.Date|RootObj|";
NTI__dxnpG8JDYv9c2JljM1Bg18g_.traceImpl = (void*)NIM_NIL;
NTI__dxnpG8JDYv9c2JljM1Bg18g_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-08-13T00:09:02
  • Finished 2024-08-13T00:09:02
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Date"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Common"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("RootObj")
        ),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Foo"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkIdentDefs.newTree(
            newIdentNode("name"),
            newIdentNode("string"),
            newEmptyNode()
          ),
          nnkIdentDefs.newTree(
            newIdentNode("date"),
            newIdentNode("Date"),
            newEmptyNode()
          )
        )
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Bar"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        nnkOfInherit.newTree(
          newIdentNode("Common")
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("ItemKind"),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("ikFoo"),
        newIdentNode("ikBar")
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("Item"),
      newEmptyNode(),
      nnkObjectTy.newTree(
        newEmptyNode(),
        newEmptyNode(),
        nnkRecList.newTree(
          nnkRecCase.newTree(
            nnkIdentDefs.newTree(
              newIdentNode("kind"),
              newIdentNode("ItemKind"),
              newEmptyNode()
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikFoo"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("fooVal"),
                  newIdentNode("Foo"),
                  newEmptyNode()
                )
              )
            ),
            nnkOfBranch.newTree(
              newIdentNode("ikBar"),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("barVal"),
                  newIdentNode("Bar"),
                  newEmptyNode()
                )
              )
            )
          )
        )
      )
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("kind"),
      newEmptyNode(),
      newIdentNode("ikBar")
    )
  ),
  nnkLetSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("item"),
      newEmptyNode(),
      nnkObjConstr.newTree(
        newIdentNode("Item"),
        nnkExprColonExpr.newTree(
          newIdentNode("kind"),
          newIdentNode("kind")
        )
      )
    )
  )
)
#a4f9bc55c ➡️ 🐛

Diagnostics

cooldome introduced a bug at 2020-10-28 13:00:49 +0000 on commit #a4f9bc55c with message:

ARC now capable of custom extra alignment. Ref, closure and seq support. (#15697)

(cherry picked from commit 0956a9953780b0952acb56806fdffa8054fe1070)

The bug is in the files:

compiler/ccgexprs.nim
compiler/liftdestructors.nim
lib/core/typeinfo.nim
lib/system/arc.nim
lib/system/bitmasks.nim
lib/system/deepcopy.nim
lib/system/memalloc.nim
lib/system/orc.nim
lib/system/seqs_v2.nim
tests/arc/thard_alignment.nim
tests/collections/thardalignmentconstraint.nim

The bug can be in the commits:

(Diagnostics sometimes off-by-one).

Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.4
  • Created 2024-08-13T00:07:55Z
  • Comments 8
  • Commands nim c --gc:arc -d:useMalloc -d:nimArcDebug -d:nimArcIds -d:nimAllocPagesViaMalloc -d:useSysAssert -d:useGcAssert -d:nimLeakDetector --debugger:native --debuginfo:on -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 && valgrind /home/runner/work/Nim/Nim/temp

🤖 Bug found in 11 minutes bisecting 327 commits at 28 commits per second

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

3 participants