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

Simple destructor code gives invalid C #23627

Closed
lou15b opened this issue May 19, 2024 · 4 comments · Fixed by #23631
Closed

Simple destructor code gives invalid C #23627

lou15b opened this issue May 19, 2024 · 4 comments · Fixed by #23631

Comments

@lou15b
Copy link

lou15b commented May 19, 2024

Description

The following example gives C code that does not compile.

when isMainModule:
  type
    TestObj = object of RootObj

    TestTestObj = object of RootObj
      testo: TestObj

  proc `=destroy`(x: TestTestObj) =
    echo "Destructor for TestTestObj"

  proc testCaseT() =
    echo "\nTest Case T"
    let tt1 {.used.} = TestTestObj(testo: TestObj())


  proc main() =
    testCaseT()

  main()

Compiling using gcc C (v14.1, with compatibility switches), C++ and clang all gave similar results to that shown in Current Output. Commands tried:

nim c --lineDir:on --passC:-Wno-error=incompatible-pointer-types scratch.nim
nim c --lineDir:on --passC:-fpermissive scratch.nim
nim c --cc:clang --lineDir:on scratch.nim
nim cpp --lineDir:on scratch.nim
nim cpp --lineDir:on --passC:-fpermissive scratch.nim

Nim Version

2.0.4

Current Output

Hint: used config file '/opt/nim-2.0.4/config/nim.cfg' [Conf]
Hint: used config file '/opt/nim-2.0.4/config/config.nims' [Conf]
......................................................................
CC: ../../../../../opt/nim-2.0.4/lib/system/exceptions.nim
CC: ../../../../../opt/nim-2.0.4/lib/std/private/digitsutils.nim
CC: ../../../../../opt/nim-2.0.4/lib/system/dollars.nim
CC: ../../../../../opt/nim-2.0.4/lib/system.nim
CC: scratch.nim
/home/louis/.cache/nim/scratch_d/@mscratch.nim.c:84:99: error: expected expression before ‘static’
   84 | static NIM_CONST tyObject_TestTestObj__aeIz9bi3IVBy9bdRVWN8QHyQ TM__X9bGGOoNyKehOTF7f2xys3g_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__X9bGGOoNyKehOTF7f2xys3g_3 = {{26, (NimStrPayload*)&TM__X9bGGOoNyKehOTF7f2xys3g_4}}
      |                                                                                                   ^~~~~~
/home/louis/scratch/Nim/gcc_issue2/scratch.nim: In function ‘eqdestroy___scratch_u4’:
/home/louis/scratch/Nim/gcc_issue2/scratch.nim:10:26: error: ‘TM__X9bGGOoNyKehOTF7f2xys3g_3’ undeclared (first use in this function); did you mean ‘TM__X9bGGOoNyKehOTF7f2xys3g_6’?
   10 |     echo "Destructor for TestTestObj"
      |                          ^~~~~~~~~~~~                 
      |                          TM__X9bGGOoNyKehOTF7f2xys3g_6
/home/louis/scratch/Nim/gcc_issue2/scratch.nim:10:26: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread -Wno-error=incompatible-pointer-types   -I/opt/nim-2.0.4/lib -I/home/louis/scratch/Nim/gcc_issue2 -o /home/louis/.cache/nim/scratch_d/@mscratch.nim.c.o /home/louis/.cache/nim/scratch_d/@mscratch.nim.c' failed with exit code: 1

Expected Output

Code should compile successfully and execute

Possible Solution

No response

Additional Information

No response

@ringabout
Copy link
Member

!nim c --gc:orc

when isMainModule:
  type
    TestObj = object of RootObj

    TestTestObj = object of RootObj
      testo: TestObj

  proc `=destroy`(x: TestTestObj) =
    echo "Destructor for TestTestObj"

  proc testCaseT() =
    echo "\nTest Case T"
    let tt1 {.used.} = TestTestObj(testo: TestObj())


  proc main() =
    testCaseT()

  main()

Copy link
Contributor

🐧 Linux bisect by @ringabout (member)
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]
/home/runner/work/Nim/Nim/@mtemp.nim.c:95:98: error: expected expression before ‘static’
   95 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:148:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  148 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:148:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I'/home/runner/.choosenim/toolchains/nim-#devel/lib' -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
 void* vTable[SEQ_DECL_SIZE];
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4963)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4747;
extern NIM_THREADVAR TFrame* framePtr__system_u2655;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_u4747);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_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_u4963();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2655 = (*framePtr__system_u2655).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:31:50
  • Finished 2024-05-20T01:31:51
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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]
/home/runner/work/Nim/Nim/@mtemp.nim.c:94:98: error: expected expression before ‘static’
   94 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  147 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I/home/runner/.choosenim/toolchains/nim-2.0.4/lib -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:31:51
  • Finished 2024-05-20T01:31:52
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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]
/home/runner/work/Nim/Nim/@mtemp.nim.c:94:98: error: expected expression before ‘static’
   94 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  147 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I/home/runner/.choosenim/toolchains/nim-2.0.4/lib -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:31:52
  • Finished 2024-05-20T01:31:53
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
1.6.20 👎 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/work/Nim/Nim/temp.nim(6, 3) Error: signature for '=destroy' must be proc[T: object](x: var T)
fatal.nim(54)            sysFatal
Error: unhandled exception: options.nim(662, 14) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:31:55
  • Finished 2024-05-20T01:31:56
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:31:58
  • Finished 2024-05-20T01:31:58
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
1.2.18 👎 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/work/Nim/Nim/temp.nim(6, 3) Error: signature for '=destroy' must be proc[T: object](x: var T)

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:32:00
  • Finished 2024-05-20T01:32:01
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4((&(*((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)))));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:32:03
  • Finished 2024-05-20T01:32:03
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              newIdentNode("TestTestObj"),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.2
  • Created 2024-05-20T01:31:20Z
  • 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 16 minutes bisecting 7 commits at 0 commits per second

@ringabout
Copy link
Member

!nim c --gc:orc

when isMainModule:
  type
    TestObj = object of RootObj

    TestTestObj = object of RootObj
      testo: TestObj

  proc `=destroy`(x: var TestTestObj) =
    echo "Destructor for TestTestObj"

  proc testCaseT() =
    echo "\nTest Case T"
    let tt1 {.used.} = TestTestObj(testo: TestObj())


  proc main() =
    testCaseT()

  main()

Copy link
Contributor

🐧 Linux bisect by @ringabout (member)
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]
/home/runner/work/Nim/Nim/temp.nim(6, 3) Warning: A custom '=destroy' hook which takes a 'var T' parameter is deprecated; it should take a 'T' parameter [Deprecated]
/home/runner/work/Nim/Nim/@mtemp.nim.c:95:98: error: expected expression before ‘static’
   95 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:148:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  148 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:148:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I'/home/runner/.choosenim/toolchains/nim-#devel/lib' -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
 void* vTable[SEQ_DECL_SIZE];
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4963)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4747;
extern NIM_THREADVAR TFrame* framePtr__system_u2655;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_u4747);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__systemZmemory_u7(p_p0, ((int)0), size_p1);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_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_u4963();
 }
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2655 = (*framePtr__system_u2655).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4(((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:33:10
  • Finished 2024-05-20T01:33:11
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              nnkVarTy.newTree(
                newIdentNode("TestTestObj")
              ),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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]
/home/runner/work/Nim/Nim/temp.nim(6, 3) Warning: A custom '=destroy' hook which takes a 'var T' parameter is deprecated; it should take a 'T' parameter [Deprecated]
/home/runner/work/Nim/Nim/@mtemp.nim.c:94:98: error: expected expression before ‘static’
   94 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  147 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I/home/runner/.choosenim/toolchains/nim-2.0.4/lib -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4(((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:33:12
  • Finished 2024-05-20T01:33:12
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              nnkVarTy.newTree(
                newIdentNode("TestTestObj")
              ),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
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]
/home/runner/work/Nim/Nim/temp.nim(6, 3) Warning: A custom '=destroy' hook which takes a 'var T' parameter is deprecated; it should take a 'T' parameter [Deprecated]
/home/runner/work/Nim/Nim/@mtemp.nim.c:94:98: error: expected expression before ‘static’
   94 | static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
      |                                                                                                  ^~~~~~
/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘eqdestroy___temp_u4’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: error: ‘TM__SRd76hP9cMfCzdUO857UhQQ_3’ undeclared (first use in this function); did you mean ‘TM__SRd76hP9cMfCzdUO857UhQQ_6’?
  147 |         echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     TM__SRd76hP9cMfCzdUO857UhQQ_6
/home/runner/work/Nim/Nim/@mtemp.nim.c:147:21: note: each undeclared identifier is reported only once for each function it appears in
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3 -pthread   -I/home/runner/.choosenim/toolchains/nim-2.0.4/lib -I/home/runner/work/Nim/Nim -o /home/runner/work/Nim/Nim/@mtemp.nim.c.o /home/runner/work/Nim/Nim/@mtemp.nim.c' failed with exit code: 1


assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 NCSTRING name;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
 tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
static N_INLINE(void, nimZeroMem)(void* p_p0, NI size_p1);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a_p0, int v_p1, NI size_p2);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_7 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8}}
;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4817;
extern NIM_THREADVAR TFrame* framePtr__system_u4434;
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_5[2] = {3701606400, 3238797824};
N_LIB_PRIVATE TNimTypeV2 NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_ = {.destructor = (void*)rttiDestroy__temp_u52, .size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .align = (NI16) NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_5, .traceImpl = (void*)NIM_NIL, .flags = 0};
static NIM_CONST NU32 TM__SRd76hP9cMfCzdUO857UhQQ_6[2] = {3701606400, 223348224};
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_ = {.destructor = (void*)NIM_NIL, .size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .align = (NI16) NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ), .depth = 1, .display = TM__SRd76hP9cMfCzdUO857UhQQ_6, .traceImpl = (void*)NIM_NIL, .flags = 0};
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x_p0) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, rttiDestroy__temp_u52)(void* dest_p0) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 eqdestroy___temp_u4(((tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg*) (dest_p0)));
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_7, 1);
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u51)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
 void (*volatile inner)(void);
 inner = PreMainInner;
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u51();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}

Stats

  • Started 2024-05-20T01:33:13
  • Finished 2024-05-20T01:33:13
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              nnkVarTy.newTree(
                newIdentNode("TestTestObj")
              ),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
1.6.20 👍 OK

Output

Test Case T
Destructor for TestTestObj

IR

Compiled filesize 95.02 Kb (97,296 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u35)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
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, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args, NI argsLen_0);
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, nimTestErrorFlag)(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__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_5 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6}}
;
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_5, 1);
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u35)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
 N_LIB_PRIVATE int cmdCount;
 N_LIB_PRIVATE char** cmdLine;
 N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u35();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.destructor = (void*)eqdestroy___temp_u4; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg); NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.align = NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg); NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.name = "|nim.temp.TestTestObj|RootObj|";
; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.traceImpl = (void*)NIM_NIL; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.flags = 0;NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.destructor = (void*)NIM_NIL; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ); NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.align = NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ); NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.name = "|nim.temp.TestObj|RootObj|";
; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.traceImpl = (void*)NIM_NIL; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.flags = 0;}

Stats

  • Started 2024-05-20T01:33:16
  • Finished 2024-05-20T01:33:16
  • 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 95.02 Kb (97,296 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_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg;
typedef struct RootObj RootObj;
typedef struct TNimTypeV2 TNimTypeV2;
typedef struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimTypeV2 {
void* destructor;
NI size;
NI align;
NCSTRING name;
void* traceImpl;
void* typeInfoV1;
NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ {
RootObj Sup;
};
struct tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg {
RootObj Sup;
tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ testo;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u35)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void);
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, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args, NI argsLen_0);
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, nimTestErrorFlag)(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__BcEMIiQvlQWs2Q5GK9bYvCg_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
N_LIB_PRIVATE TNimTypeV2 NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_;
static NIM_CONST tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{(&NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_)}, {{(&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_)}}}
;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_5 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6}}
;
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_: ;
}
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 N_NIMCALL(void, eqdestroy___temp_u4)(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__temp_u6)(void) {
 tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_5, 1);
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ));
 tt1.testo.Sup.m_type = (&NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___temp_u4((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__temp_u35)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__temp_u6();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
 N_LIB_PRIVATE int cmdCount;
 N_LIB_PRIVATE char** cmdLine;
 N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 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) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__temp_u35();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.destructor = (void*)eqdestroy___temp_u4; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.size = sizeof(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg); NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.align = NIM_ALIGNOF(tyObject_TestTestObj__BcEMIiQvlQWs2Q5GK9bYvCg); NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.name = "|nim.temp.TestTestObj|RootObj|";
; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.traceImpl = (void*)NIM_NIL; NTIv2__BcEMIiQvlQWs2Q5GK9bYvCg_.flags = 0;NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.destructor = (void*)NIM_NIL; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.size = sizeof(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ); NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.align = NIM_ALIGNOF(tyObject_TestObj__jQ1QBnQfCzrc4JyDBZaLlQ); NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.name = "|nim.temp.TestObj|RootObj|";
; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.traceImpl = (void*)NIM_NIL; NTIv2__jQ1QBnQfCzrc4JyDBZaLlQ_.flags = 0;}

Stats

  • Started 2024-05-20T01:33:18
  • Finished 2024-05-20T01:33:18
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              nnkVarTy.newTree(
                newIdentNode("TestTestObj")
              ),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
1.2.18 👍 OK

Output

Test Case T
Destructor for TestTestObj

IR

Compiled filesize 87.52 Kb (89,616 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_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA {
RootObj Sup;
};
struct tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA {
RootObj Sup;
tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA testo;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__EzBZaa239as9bFx8yeHDoTOw_2)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___zBID29aekK1hehpDfKbkqSg)(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA* x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__ARKTm9bq3MWD4lEB2eNiz9aA_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
N_LIB_PRIVATE TNimType NTI__3AeJkC21Y1k6SDwUrpYJAA_;
static NIM_CONST tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{(&NTI__ARKTm9bq3MWD4lEB2eNiz9aA_)}, {{(&NTI__3AeJkC21Y1k6SDwUrpYJAA_)}}}
;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_5 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6}}
;
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___zBID29aekK1hehpDfKbkqSg)(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__EzBZaa239as9bFx8yeHDoTOw_2)(void) {
 tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_5, 1);
 chckNil((void*)(&tt1));
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 chckNil((void*)(&tt1.testo));
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA));
 tt1.testo.Sup.m_type = (&NTI__3AeJkC21Y1k6SDwUrpYJAA_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___zBID29aekK1hehpDfKbkqSg((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__EzBZaa239as9bFx8yeHDoTOw_2();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 tempDatInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__EzBZaa239as9bFx8yeHDoTOw();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.destructor = (void*)eqdestroy___zBID29aekK1hehpDfKbkqSg; NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.size = sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA);
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.name = "|nim.temp.TestTestObj|RootObj|";
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.traceImpl = (void*)NIM_NIL;
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.disposeImpl = (void*)NIM_NIL;
NTI__3AeJkC21Y1k6SDwUrpYJAA_.destructor = (void*)NIM_NIL; NTI__3AeJkC21Y1k6SDwUrpYJAA_.size = sizeof(tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA);
NTI__3AeJkC21Y1k6SDwUrpYJAA_.name = "|nim.temp.TestObj|RootObj|";
NTI__3AeJkC21Y1k6SDwUrpYJAA_.traceImpl = (void*)NIM_NIL;
NTI__3AeJkC21Y1k6SDwUrpYJAA_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-05-20T01:33:21
  • Finished 2024-05-20T01:33:21
  • 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 87.52 Kb (89,616 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_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA;
typedef struct RootObj RootObj;
typedef struct TNimType TNimType;
typedef struct tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
struct TNimType {
void* destructor;
NI size;
NCSTRING name;
void* traceImpl;
void* disposeImpl;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA {
RootObj Sup;
};
struct tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA {
RootObj Sup;
tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA testo;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void);
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__EzBZaa239as9bFx8yeHDoTOw_2)(void);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___zBID29aekK1hehpDfKbkqSg)(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA* x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NOINLINE(void, chckNil)(void* p);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__ARKTm9bq3MWD4lEB2eNiz9aA_;
static const struct {
NI cap; NIM_CHAR data[26+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 26 | NIM_STRLIT_FLAG, "Destructor for TestTestObj" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_3 = {{26, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4}}
;
N_LIB_PRIVATE TNimType NTI__3AeJkC21Y1k6SDwUrpYJAA_;
static NIM_CONST tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA TM__SRd76hP9cMfCzdUO857UhQQ_2 = {{(&NTI__ARKTm9bq3MWD4lEB2eNiz9aA_)}, {{(&NTI__3AeJkC21Y1k6SDwUrpYJAA_)}}}
;
static const struct {
NI cap; NIM_CHAR data[12+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 12 | NIM_STRLIT_FLAG, "\012Test Case T" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_5 = {{12, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6}}
;
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
 void* T1_;
 T1_ = (void*)0;
 T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
 NIM_BOOL* result;
 result = (NIM_BOOL*)0;
 result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
 return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
  (*s).calldepth = ((NI16) 0);
 }
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
  callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
 }
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___zBID29aekK1hehpDfKbkqSg)(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA* x) {
 nimfr_("=destroy", "/home/runner/work/Nim/Nim/temp.nim");
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_3, 1);
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, testCaseT__EzBZaa239as9bFx8yeHDoTOw_2)(void) {
 tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA tt1;
NIM_BOOL oldNimErrFin1_;
NIM_BOOL* nimErr_;
 nimfr_("testCaseT", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_5, 1);
 chckNil((void*)(&tt1));
 nimZeroMem((void*)(&tt1), sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA));
 tt1 = TM__SRd76hP9cMfCzdUO857UhQQ_2;
 chckNil((void*)(&tt1.testo));
 nimZeroMem((void*)(&tt1.testo), sizeof(tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA));
 tt1.testo.Sup.m_type = (&NTI__3AeJkC21Y1k6SDwUrpYJAA_);
 {
  LA1_:;
 }
 {
  oldNimErrFin1_ = *nimErr_; *nimErr_ = NIM_FALSE;
  eqdestroy___zBID29aekK1hehpDfKbkqSg((&tt1));
  if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
  *nimErr_ = oldNimErrFin1_;
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void) {
NIM_BOOL* nimErr_;
 nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
 testCaseT__EzBZaa239as9bFx8yeHDoTOw_2();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 tempDatInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
 main__EzBZaa239as9bFx8yeHDoTOw();
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 BeforeRet_: ;
 nimTestErrorFlag();
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.destructor = (void*)eqdestroy___zBID29aekK1hehpDfKbkqSg; NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.size = sizeof(tyObject_TestTestObj__ARKTm9bq3MWD4lEB2eNiz9aA);
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.name = "|nim.temp.TestTestObj|RootObj|";
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.traceImpl = (void*)NIM_NIL;
NTI__ARKTm9bq3MWD4lEB2eNiz9aA_.disposeImpl = (void*)NIM_NIL;
NTI__3AeJkC21Y1k6SDwUrpYJAA_.destructor = (void*)NIM_NIL; NTI__3AeJkC21Y1k6SDwUrpYJAA_.size = sizeof(tyObject_TestObj__3AeJkC21Y1k6SDwUrpYJAA);
NTI__3AeJkC21Y1k6SDwUrpYJAA_.name = "|nim.temp.TestObj|RootObj|";
NTI__3AeJkC21Y1k6SDwUrpYJAA_.traceImpl = (void*)NIM_NIL;
NTI__3AeJkC21Y1k6SDwUrpYJAA_.disposeImpl = (void*)NIM_NIL;
}

Stats

  • Started 2024-05-20T01:33:23
  • Finished 2024-05-20T01:33:23
  • Duration

AST

nnkStmtList.newTree(
  nnkWhenStmt.newTree(
    nnkElifBranch.newTree(
      newIdentNode("isMainModule"),
      nnkStmtList.newTree(
        nnkTypeSection.newTree(
          nnkTypeDef.newTree(
            newIdentNode("TestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              newEmptyNode()
            )
          ),
          nnkTypeDef.newTree(
            newIdentNode("TestTestObj"),
            newEmptyNode(),
            nnkObjectTy.newTree(
              newEmptyNode(),
              nnkOfInherit.newTree(
                newIdentNode("RootObj")
              ),
              nnkRecList.newTree(
                nnkIdentDefs.newTree(
                  newIdentNode("testo"),
                  newIdentNode("TestObj"),
                  newEmptyNode()
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          nnkAccQuoted.newTree(
            newIdentNode("="),
            newIdentNode("destroy")
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode(),
            nnkIdentDefs.newTree(
              newIdentNode("x"),
              nnkVarTy.newTree(
                newIdentNode("TestTestObj")
              ),
              newEmptyNode()
            )
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("Destructor for TestTestObj")
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("testCaseT"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCommand.newTree(
              newIdentNode("echo"),
              newLit("\nTest Case T")
            ),
            nnkLetSection.newTree(
              nnkIdentDefs.newTree(
                nnkPragmaExpr.newTree(
                  newIdentNode("tt1"),
                  nnkPragma.newTree(
                    newIdentNode("used")
                  )
                ),
                newEmptyNode(),
                nnkObjConstr.newTree(
                  newIdentNode("TestTestObj"),
                  nnkExprColonExpr.newTree(
                    newIdentNode("testo"),
                    nnkCall.newTree(
                      newIdentNode("TestObj")
                    )
                  )
                )
              )
            )
          )
        ),
        nnkProcDef.newTree(
          newIdentNode("main"),
          newEmptyNode(),
          newEmptyNode(),
          nnkFormalParams.newTree(
            newEmptyNode()
          ),
          newEmptyNode(),
          newEmptyNode(),
          nnkStmtList.newTree(
            nnkCall.newTree(
              newIdentNode("testCaseT")
            )
          )
        ),
        nnkCall.newTree(
          newIdentNode("main")
        )
      )
    )
  )
)
#ca1f3f36b ➡️ 🐛

Diagnostics

andreas rumpf introduced a bug at 2022-09-27 10:57:47 +0200 on commit #ca1f3f36b with message:

no ropes WIP (#20433)

* refactorings in preparation for ropes elimination of the C code generator; mostly the usual ': Rope' -> 'result: var Rope' rewrite
* rewrote ccgcalls.nim
* refactored ccgexprs.nim
* ccgliterals: refactoring
* refactoring: code dealing with name mangling
* refactoring: getRecordFieldsAux
* ropes are strings (insert obscene joke here)
* optimize JS code gen
* optimizations and code improvements
* more optimizations
* final cleanups

The bug is in the files:

compiler/ast.nim
compiler/astalgo.nim
compiler/ccgcalls.nim
compiler/ccgexprs.nim
compiler/ccgliterals.nim
compiler/ccgreset.nim
compiler/ccgstmts.nim
compiler/ccgthreadvars.nim
compiler/ccgtrav.nim
compiler/ccgtypes.nim
compiler/cgen.nim
compiler/cgendata.nim
compiler/cgmeth.nim
compiler/depends.nim
compiler/extccomp.nim
compiler/ic/ic.nim
compiler/jsgen.nim
compiler/jstypes.nim
compiler/msgs.nim
compiler/pragmas.nim
compiler/ropes.nim
compiler/semexprs.nim
compiler/semtypes.nim
compiler/sighashes.nim

The bug can be in the commits:

(Diagnostics sometimes off-by-one).

Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.2
  • Created 2024-05-20T01:32:42Z
  • Comments 3
  • 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 31 minutes bisecting 2232 commits at 71 commits per second

Araq pushed a commit that referenced this issue May 21, 2024
fixes #23627

```nim
type
  TestObj = object of RootObj

  TestTestObj = object of RootObj
    testo: TestObj

proc `=destroy`(x: TestTestObj) =
  echo "Destructor for TestTestObj"

proc testCaseT() =
  echo "\nTest Case T"
  let tt1 {.used.} = TestTestObj(testo: TestObj())
```

When generating const object fields, it's likely that
we need to generate type infos for the object, which may be an object
with
custom hooks. We need to generate potential consts in the hooks first.

#20433 changed the semantics of
initialization. It should evaluate`BracedInit` first.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants