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

Bug in C++ codegen for set stringify when setting size #23692

Open
carrexxii opened this issue Jun 7, 2024 · 5 comments
Open

Bug in C++ codegen for set stringify when setting size #23692

carrexxii opened this issue Jun 7, 2024 · 5 comments

Comments

@carrexxii
Copy link

Description

Increasing the size of a set using the size pragma causes invalid C++ code output.

type
    Flags* = enum
        A
        B
    Mask* {.size: sizeof(uint16).} = set[Flags]

proc check(flags: Mask) =
    echo flags

check {A, B}

Using a size of 1 byte works, but anything larger does not. C output works regardless of size.

Nim Version

Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-06-02
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 4bd1cf2
active boot switches: -d:release

Current Output

/usr/bin/ld: ~/.cache/nim/b_d/@mb.nim.cpp.o: in function `check__b_u8(unsigned long)':
@mb.nim.cpp:(.text+0x1d8): undefined reference to `dollar___b_u95(unsigned long)'
/usr/bin/ld: .../b: hidden symbol `_Z14dollar___b_u95m' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status

Expected Output

{A, B}

Possible Solution

No response

Additional Information

Tested 1.6.20, 2.0.0 and 2.0.4 using the Nim playground and none of them work.

@juancarlospaco
Copy link
Collaborator

!nim cpp

type
    Flags* = enum
        A
        B
    Mask* {.size: sizeof(uint16).} = set[Flags]

proc check(flags: Mask) =
    echo flags

check {A, B}

Copy link
Contributor

github-actions bot commented Jun 7, 2024

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

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__temp_u8(unsigned short)':
@mtemp.nim.cpp:(.text+0x1ce): undefined reference to `dollar___temp_u95(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z17dollar___temp_u95t' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-@hdevel@slib@ssystem@sexceptions.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-@hdevel@slib@sstd@sprivate@sdigitsutils.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-@hdevel@slib@ssystem@sdollars.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-@hdevel@slib@ssystem.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o  -pthread -pthread   -ldl'
assertions.nim(34)       raiseAssert
Error: unhandled exception: errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <exception>
#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;
struct NimStrPayload;
struct NimStringV2;
struct Exception;
struct RootObj;
struct TNimTypeV2;
struct tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ;
struct tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ_Content;
struct tyObject_StackTraceEntry__2Xjg6E7TZG7p9bcgUNTKHrg;
typedef NU16 tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
 void** vTable;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ {
NI len; tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ_Content* p;
};
struct Exception : public RootObj {
 Exception* parent;
 NCSTRING name;
 NimStringV2 message;
 tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ trace;
 Exception* up;
};
struct tyObject_StackTraceEntry__2Xjg6E7TZG7p9bcgUNTKHrg {
 NCSTRING procname;
 NI line;
 NCSTRING filename;
};
struct tySequence__9bNRJkU9cJnNkESCDTQ7DgcQ_Content { NI cap; tyObject_StackTraceEntry__2Xjg6E7TZG7p9bcgUNTKHrg data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4587)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 1 | NIM_STRLIT_FLAG, "A" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 1 | NIM_STRLIT_FLAG, "B" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_THREADVAR TFrame* framePtr__system_u2654;
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u5)(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w e_p0) {
 NimStringV2 result;
 switch (e_p0) {
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)0):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 }
 break;
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)1):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 }
 break;
 default: __builtin_unreachable();
 }
 return result;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = framePtr__system_u2654;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s_p0) {
 framePtr__system_u2654 = s_p0;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u2654 == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s_p0).calldepth = ((NI16)0);
}	}
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u2654).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u2654;
 framePtr__system_u2654 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
{		callDepthLimitReached__system_u4587();
}	}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2654 = (*framePtr__system_u2654).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0) {
 NimStringV2 colontmpD_;
 std::exception_ptr T2_;
 tyArray__nHXaesL0DJZHyVS07ARPRA T3_;
 TFrame* _nimCurFrame;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 try {
 colontmpD_ = dollar___temp_u95(flags_p0);
 T3_[0] = colontmpD_;
 echoBinSafe(T3_, 1);
 }
 catch (Exception* T3_) {
 setFrame(_nimCurFrame);
 T2_ = std::current_exception();
 }
 catch (...) {
  setFrame(_nimCurFrame);
  T2_ = std::current_exception();
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
  if (T2_) std::rethrow_exception(T2_);
 }
 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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystematsexceptionsdotnim_DatInit000();
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__temp_u8(3);
 popFrame();
}
}

Stats

  • Started 2024-06-07T13:54:52
  • Finished 2024-06-07T13:54:52
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
stable 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__temp_u8(unsigned short)':
@mtemp.nim.cpp:(.text+0x1d2): undefined reference to `dollar___temp_u95(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z17dollar___temp_u95t' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem@sexceptions.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@sstd@sprivate@sdigitsutils.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem@sdollars.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o  -pthread -pthread   -ldl'
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 <exception>
#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;
struct NimStrPayload;
struct NimStringV2;
struct Exception;
struct RootObj;
struct TNimTypeV2;
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ;
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content;
struct tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ;
typedef NU16 tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ {
NI len; tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content* p;
};
struct Exception : public RootObj {
 Exception* parent;
 NCSTRING name;
 NimStringV2 message;
 tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ trace;
 Exception* up;
};
struct tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ {
 NCSTRING procname;
 NI line;
 NCSTRING filename;
};
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content { NI cap; tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4584)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 1 | NIM_STRLIT_FLAG, "A" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 1 | NIM_STRLIT_FLAG, "B" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u5)(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w e_p0) {
 NimStringV2 result;
 switch (e_p0) {
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)0):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 }
 break;
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)1):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 }
 break;
 }
 return result;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = framePtr__system_u4020;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s_p0) {
 framePtr__system_u4020 = s_p0;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s_p0).calldepth = ((NI16)0);
}	}
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
{		callDepthLimitReached__system_u4584();
}	}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0) {
 NimStringV2 colontmpD_;
 tyArray__nHXaesL0DJZHyVS07ARPRA T3_;
 TFrame* _nimCurFrame;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 std::exception_ptr T2_;
 try {
 colontmpD_ = dollar___temp_u95(flags_p0);
 T3_[0] = colontmpD_;
 echoBinSafe(T3_, 1);
 }
 catch (Exception* T3_) {
 setFrame(_nimCurFrame);
 T2_ = std::current_exception();
 }
 catch (...) {
  setFrame(_nimCurFrame);
  T2_ = std::current_exception();
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
  if (T2_) std::rethrow_exception(T2_);
 }
 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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000();
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__temp_u8(3);
 popFrame();
}
}

Stats

  • Started 2024-06-07T13:54:53
  • Finished 2024-06-07T13:54:53
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
2.0.4 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__temp_u8(unsigned short)':
@mtemp.nim.cpp:(.text+0x1d2): undefined reference to `dollar___temp_u95(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z17dollar___temp_u95t' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem@sexceptions.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@sstd@sprivate@sdigitsutils.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem@sdollars.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.4@slib@ssystem.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o  -pthread -pthread   -ldl'
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 <exception>
#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;
struct NimStrPayload;
struct NimStringV2;
struct Exception;
struct RootObj;
struct TNimTypeV2;
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ;
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content;
struct tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ;
typedef NU16 tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ {
NI len; tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content* p;
};
struct Exception : public RootObj {
 Exception* parent;
 NCSTRING name;
 NimStringV2 message;
 tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ trace;
 Exception* up;
};
struct tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ {
 NCSTRING procname;
 NI line;
 NCSTRING filename;
};
struct tySequence__W5u7dtuXI9c4BOBf9bW9bZhWQ_Content { NI cap; tyObject_StackTraceEntry__6CL1lcV9bxEp7TPS0fN8sRQ data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4584)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 1 | NIM_STRLIT_FLAG, "A" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 1 | NIM_STRLIT_FLAG, "B" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u5)(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w e_p0) {
 NimStringV2 result;
 switch (e_p0) {
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)0):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 }
 break;
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)1):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 }
 break;
 }
 return result;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = framePtr__system_u4020;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s_p0) {
 framePtr__system_u4020 = s_p0;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4020 == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s_p0).calldepth = ((NI16)0);
}	}
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4020).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4020;
 framePtr__system_u4020 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
{		callDepthLimitReached__system_u4584();
}	}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0) {
 NimStringV2 colontmpD_;
 tyArray__nHXaesL0DJZHyVS07ARPRA T3_;
 TFrame* _nimCurFrame;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 std::exception_ptr T2_;
 try {
 colontmpD_ = dollar___temp_u95(flags_p0);
 T3_[0] = colontmpD_;
 echoBinSafe(T3_, 1);
 }
 catch (Exception* T3_) {
 setFrame(_nimCurFrame);
 T2_ = std::current_exception();
 }
 catch (...) {
  setFrame(_nimCurFrame);
  T2_ = std::current_exception();
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
  if (T2_) std::rethrow_exception(T2_);
 }
 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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot4atslibatssystematsexceptionsdotnim_DatInit000();
 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) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__temp_u8(3);
 popFrame();
}
}

Stats

  • Started 2024-06-07T13:54:54
  • Finished 2024-06-07T13:54:54
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
2.0.0 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__temp_u8(unsigned short)':
@mtemp.nim.cpp:(.text+0x1ea): undefined reference to `dollar___temp_u95(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z17dollar___temp_u95t' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.0@slib@ssystem@sexceptions.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.0@slib@sstd@sprivate@sdigitsutils.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.0@slib@ssystem@sdollars.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-2.0.0@slib@ssystem.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o  -pthread -pthread   -ldl'
assertions.nim(34)       raiseAssert
Error: unhandled exception: options.nim(664, 5) `false` errGenerated [AssertionDefect]

IR

Compiled filesize 0 bytes (0 bytes)
#define NIM_INTBITS 64
#include "nimbase.h"
#include <exception>
#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;
struct NimStrPayload;
struct NimStringV2;
struct Exception;
struct RootObj;
struct TNimTypeV2;
struct tySequence__2ALwPJKv8Nz8mMm4Hy9crdw;
struct tySequence__2ALwPJKv8Nz8mMm4Hy9crdw_Content;
struct tyObject_StackTraceEntry__nOjYJiLBbFH64nNmW1UArA;
typedef NU16 tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct NimStrPayload {
 NI cap;
 NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
 NI len;
 NimStrPayload* p;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct TNimTypeV2 {
 void* destructor;
 NI size;
 NI16 align;
 NI16 depth;
 NU32* display;
 void* traceImpl;
 void* typeInfoV1;
 NI flags;
};
struct RootObj {
TNimTypeV2* m_type;
};
struct tySequence__2ALwPJKv8Nz8mMm4Hy9crdw {
NI len; tySequence__2ALwPJKv8Nz8mMm4Hy9crdw_Content* p;
};
struct Exception : public RootObj {
 Exception* parent;
 NCSTRING name;
 NimStringV2 message;
 tySequence__2ALwPJKv8Nz8mMm4Hy9crdw trace;
 Exception* up;
};
struct tyObject_StackTraceEntry__nOjYJiLBbFH64nNmW1UArA {
 NCSTRING procname;
 NI line;
 NCSTRING filename;
};
struct tySequence__2ALwPJKv8Nz8mMm4Hy9crdw_Content { NI cap; tyObject_StackTraceEntry__nOjYJiLBbFH64nNmW1UArA data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0);
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u95)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w x_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(TFrame*, getFrame)(void);
static N_INLINE(void, setFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4570)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_2 = { 1 | NIM_STRLIT_FLAG, "A" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_3 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_2};
static const struct {
NI cap; NIM_CHAR data[1+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_4 = { 1 | NIM_STRLIT_FLAG, "B" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_5 = {1, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_4};
extern NIM_THREADVAR TFrame* framePtr__system_u4006;
N_LIB_PRIVATE N_NIMCALL(NimStringV2, dollar___temp_u5)(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w e_p0) {
 NimStringV2 result;
 result.len = 0; result.p = NIM_NIL;
 switch (e_p0) {
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)0):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_3;
 }
 break;
 case ((tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w)1):
 {
  result = TM__SRd76hP9cMfCzdUO857UhQQ_5;
 }
 break;
 }
 return result;
}
static N_INLINE(TFrame*, getFrame)(void) {
 TFrame* result;
 result = (TFrame*)0;
 result = framePtr__system_u4006;
 return result;
}
static N_INLINE(void, setFrame)(TFrame* s_p0) {
 framePtr__system_u4006 = s_p0;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
 {
  if (!(framePtr__system_u4006 == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s_p0).calldepth = ((NI16)0);
}	}
 goto LA1_;
LA3_: ;
 {
  (*s_p0).calldepth = (NI16)((*framePtr__system_u4006).calldepth + ((NI16)1));
 }
LA1_: ;
 (*s_p0).prev = framePtr__system_u4006;
 framePtr__system_u4006 = s_p0;
 {
  if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
{		callDepthLimitReached__system_u4570();
}	}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u4006 = (*framePtr__system_u4006).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags_p0) {
 NimStringV2 colontmpD_;
 tyArray__nHXaesL0DJZHyVS07ARPRA T3_;
 TFrame* _nimCurFrame;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 _nimCurFrame = getFrame();
 colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
 std::exception_ptr T2_;
 try {
 colontmpD_ = dollar___temp_u95(flags_p0);
 T3_[0] = colontmpD_;
 echoBinSafe(T3_, 1);
 }
 catch (Exception* T3_) {
 setFrame(_nimCurFrame);
 T2_ = std::current_exception();
 }
 catch (...) {
  setFrame(_nimCurFrame);
  T2_ = std::current_exception();
 }
 {
  if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
  if (T2_) std::rethrow_exception(T2_);
 }
 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;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 (*inner)();
#else
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystematsexceptionsdotnim_DatInit000();
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot0atslibatssystemdotnim_Init000();
 PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 (*inner)();
#else
 PreMain();
 NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__temp_u8(3);
 popFrame();
}
}

Stats

  • Started 2024-06-07T13:54:57
  • Finished 2024-06-07T13:54:58
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
1.6.20 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__temp_u8(unsigned short)':
@mtemp.nim.cpp:(.text+0x147): undefined reference to `dollar___temp_u74(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z17dollar___temp_u74t' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-1.6.20@slib@sstd@sprivate@sdigitsutils.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-1.6.20@slib@ssystem@sdollars.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-1.6.20@slib@ssystem@sio.nim.cpp.o /home/runner/work/Nim/Nim/@m..@s..@s..@s.choosenim@stoolchains@snim-1.6.20@slib@ssystem.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o    -ldl'
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, file) \
 FR_.line = n; FR_.filename = file;
struct NimStringDesc;
struct TGenericSeq;
struct TNimType;
struct TNimNode;
typedef NU16 tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc : public TGenericSeq {
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w;
typedef NU8 tyEnum_TNimKind__b9brdfAMvuT12kv1MtmF3IQ;
typedef NU8 tySet_tyEnum_TNimTypeFlag__h29aLKtZInAIaLqhWRujWcA;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__b9brdfAMvuT12kv1MtmF3IQ kind;
tySet_tyEnum_TNimTypeFlag__h29aLKtZInAIaLqhWRujWcA flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__K6UETQxRj3HYBl69c6NhKig;
struct TNimNode {
tyEnum_TNimNodeKind__K6UETQxRj3HYBl69c6NhKig kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___temp_u74)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u2993)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
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 TNimType NTIflags__poAG8L9aG9aKHvBHjNpFE27w_;
extern TFrame* framePtr__system_u2564;
static N_INLINE(void, nimSetMem__systemZmemory_u7)(void* a, int v, NI size) {
 void* T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__systemZmemory_u7(p, ((int) 0), size);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__system_u2564 == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s).calldepth = ((NI16) 0);
}	}
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__system_u2564).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__system_u2564;
 framePtr__system_u2564 = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
{		callDepthLimitReached__system_u2993();
}	}
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__system_u2564 = (*framePtr__system_u2564).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__temp_u8)(tySet_tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w flags) {
 tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
 T1_[0] = dollar___temp_u74(flags);
 echoBinSafe(T1_, 1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
 N_LIB_PRIVATE int cmdCount;
 N_LIB_PRIVATE char** cmdLine;
 N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_DatInit000();
 initStackBottomWith((void *)&inner);
 atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot20atslibatssystemdotnim_Init000();
 atmtempdotnim_DatInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__temp_u8(3);
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, atmtempdotnim_DatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
static char* NIM_CONST TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {
"A", 
"B"};
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.size = sizeof(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w);
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.align = NIM_ALIGNOF(tyEnum_Flags__poAG8L9aG9aKHvBHjNpFE27w);
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.kind = 14;
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.base = 0;
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.flags = 3;
for (TM__SRd76hP9cMfCzdUO857UhQQ_4 = 0; TM__SRd76hP9cMfCzdUO857UhQQ_4 < 2; TM__SRd76hP9cMfCzdUO857UhQQ_4++) {
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].offset = TM__SRd76hP9cMfCzdUO857UhQQ_4;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].name = TM__SRd76hP9cMfCzdUO857UhQQ_3[TM__SRd76hP9cMfCzdUO857UhQQ_4];
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[TM__SRd76hP9cMfCzdUO857UhQQ_4] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0];
}
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTIflags__poAG8L9aG9aKHvBHjNpFE27w_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
}

Stats

  • Started 2024-06-07T13:55:01
  • Finished 2024-06-07T13:55:01
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
1.4.8 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__UKHWBr5jprrq1q9bYXgsRnQ(unsigned short)':
@mtemp.nim.cpp:(.text+0x147): undefined reference to `dollar___H7tBK6vUybcjPkezQwEk3g(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z31dollar___H7tBK6vUybcjPkezQwEk3gt' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/stdlib_dollars.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_io.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_system.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o    -ldl'

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, file) \
 FR_.line = n; FR_.filename = file;
struct NimStringDesc;
struct TGenericSeq;
struct TNimType;
struct TNimNode;
typedef NU16 tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc : public TGenericSeq {
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
NI align;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
N_LIB_PRIVATE N_NIMCALL(void, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___H7tBK6vUybcjPkezQwEk3g)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__kEF5c4A3mE0Q9aypt5hX8aw_;
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_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == ((TFrame*) NIM_NIL))) goto LA3_;
{		(*s).calldepth = ((NI16) 0);
}	}
 goto LA1_;
 LA3_: ;
 {
  (*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
 }
 LA1_: ;
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
{		callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}	}
 LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags) {
 tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
 T1_[0] = dollar___H7tBK6vUybcjPkezQwEk3g(flags);
 echoBinSafe(T1_, 1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 tempDatInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__UKHWBr5jprrq1q9bYXgsRnQ(3);
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
static char* NIM_CONST TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {
"A", 
"B"};
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.size = sizeof(tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw);
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.align = NIM_ALIGNOF(tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw);
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.kind = 14;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.base = 0;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.flags = 3;
for (TM__SRd76hP9cMfCzdUO857UhQQ_4 = 0; TM__SRd76hP9cMfCzdUO857UhQQ_4 < 2; TM__SRd76hP9cMfCzdUO857UhQQ_4++) {
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].offset = TM__SRd76hP9cMfCzdUO857UhQQ_4;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].name = TM__SRd76hP9cMfCzdUO857UhQQ_3[TM__SRd76hP9cMfCzdUO857UhQQ_4];
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[TM__SRd76hP9cMfCzdUO857UhQQ_4] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0];
}
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
}

Stats

  • Started 2024-06-07T13:55:04
  • Finished 2024-06-07T13:55:04
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
1.2.18 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__UKHWBr5jprrq1q9bYXgsRnQ(unsigned short)':
@mtemp.nim.cpp:(.text+0x147): undefined reference to `dollar___H7tBK6vUybcjPkezQwEk3g(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z31dollar___H7tBK6vUybcjPkezQwEk3gt' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/stdlib_dollars.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_io.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_system.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o    -ldl'

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, file) \
 FR_.line = n; FR_.filename = file;
struct NimStringDesc;
struct TGenericSeq;
struct TNimType;
struct TNimNode;
typedef NU16 tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc : public TGenericSeq {
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
N_LIB_PRIVATE N_NIMCALL(void, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___H7tBK6vUybcjPkezQwEk3g)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw x);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
N_LIB_PRIVATE TNimType NTI__kEF5c4A3mE0Q9aypt5hX8aw_;
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_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
 nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, nimFrame)(TFrame* s) {
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == 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, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags) {
 tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
 T1_[0] = dollar___H7tBK6vUybcjPkezQwEk3g(flags);
 echoBinSafe(T1_, 1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
 nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 tempDatInit000();
 (*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__UKHWBr5jprrq1q9bYXgsRnQ(3);
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
static char* NIM_CONST TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {
"A", 
"B"};
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.size = sizeof(tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw);
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.kind = 14;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.base = 0;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.flags = 3;
for (TM__SRd76hP9cMfCzdUO857UhQQ_4 = 0; TM__SRd76hP9cMfCzdUO857UhQQ_4 < 2; TM__SRd76hP9cMfCzdUO857UhQQ_4++) {
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].offset = TM__SRd76hP9cMfCzdUO857UhQQ_4;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].name = TM__SRd76hP9cMfCzdUO857UhQQ_3[TM__SRd76hP9cMfCzdUO857UhQQ_4];
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[TM__SRd76hP9cMfCzdUO857UhQQ_4] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0];
}
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
}

Stats

  • Started 2024-06-07T13:55:07
  • Finished 2024-06-07T13:55:07
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
1.0.10 👎 FAIL

Output

Error: Command failed: nim cpp --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
/usr/bin/ld: /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o: in function `check__UKHWBr5jprrq1q9bYXgsRnQ(unsigned short)':
@mtemp.nim.cpp:(.text+0x159): undefined reference to `dollar___H7tBK6vUybcjPkezQwEk3g(unsigned short)'
/usr/bin/ld: /home/runner/work/Nim/Nim/temp: hidden symbol `_Z31dollar___H7tBK6vUybcjPkezQwEk3gt' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++   -o /home/runner/work/Nim/Nim/temp  /home/runner/work/Nim/Nim/stdlib_dollars.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_io.nim.cpp.o /home/runner/work/Nim/Nim/stdlib_system.nim.cpp.o /home/runner/work/Nim/Nim/@mtemp.nim.cpp.o    -ldl'

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, file) \
 FR_.line = n; FR_.filename = file;
struct NimStringDesc;
struct TGenericSeq;
struct TNimType;
struct TNimNode;
typedef NU16 tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc : public TGenericSeq {
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
typedef NU8 tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw;
typedef NU8 tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind__jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag__v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind__unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
N_LIB_PRIVATE N_NIMCALL(void, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___H7tBK6vUybcjPkezQwEk3g)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw x);
N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
TNimType NTI__kEF5c4A3mE0Q9aypt5hX8aw_;
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_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {	nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
}
static N_INLINE(void, nimFrame)(TFrame* s) {	NI T1_;
 T1_ = (NI)0;
 {
  if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA4_;
{		T1_ = ((NI) 0);
}	}
 goto LA2_;
 LA4_: ;
 {
  T1_ = ((NI) ((NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1))));
 }
 LA2_: ;
 (*s).calldepth = ((NI16) (T1_));
 (*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
 framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
 {
  if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA9_;
{		callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}	}
 LA9_: ;
}
static N_INLINE(void, popFrame)(void) {	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, check__UKHWBr5jprrq1q9bYXgsRnQ)(tySet_tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw flags) {	tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
 nimfr_("check", "/home/runner/work/Nim/Nim/temp.nim");
 nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
 T1_[0] = dollar___H7tBK6vUybcjPkezQwEk3g(flags);
 echoBinSafe(T1_, 1);
 popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {	nimGC_setStackBottom(locals);
}
void PreMainInner(void) {
}
int cmdCount;
char** cmdLine;
char** gEnv;
void PreMain(void) {
 void (*volatile inner)(void);
 inner = PreMainInner;
 systemDatInit000();
 initStackBottomWith((void *)&inner);
 systemInit000();
 tempDatInit000();
 (*inner)();
}
N_CDECL(void, NimMainInner)(void) {
 NimMainModule();
}
N_CDECL(void, NimMain)(void) {
 void (*volatile inner)(void);
 PreMain();
 inner = NimMainInner;
 initStackBottomWith((void *)&inner);
 (*inner)();
}
int main(int argc, char** args, char** env) {
 cmdLine = args;
 cmdCount = argc;
 gEnv = env;
 NimMain();
 return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
 nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
 check__UKHWBr5jprrq1q9bYXgsRnQ(3);
 popFrame();
}
}
N_LIB_PRIVATE N_NIMCALL(void, tempDatInit000)(void) {
static TNimNode* TM__SRd76hP9cMfCzdUO857UhQQ_2_2[2];
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
static char* NIM_CONST TM__SRd76hP9cMfCzdUO857UhQQ_3[2] = {
"A", 
"B"};
static TNimNode TM__SRd76hP9cMfCzdUO857UhQQ_0[3];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.size = sizeof(tyEnum_Flags__kEF5c4A3mE0Q9aypt5hX8aw);
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.kind = 14;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.base = 0;
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.flags = 3;
for (TM__SRd76hP9cMfCzdUO857UhQQ_4 = 0; TM__SRd76hP9cMfCzdUO857UhQQ_4 < 2; TM__SRd76hP9cMfCzdUO857UhQQ_4++) {
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].kind = 1;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].offset = TM__SRd76hP9cMfCzdUO857UhQQ_4;
TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0].name = TM__SRd76hP9cMfCzdUO857UhQQ_3[TM__SRd76hP9cMfCzdUO857UhQQ_4];
TM__SRd76hP9cMfCzdUO857UhQQ_2_2[TM__SRd76hP9cMfCzdUO857UhQQ_4] = &TM__SRd76hP9cMfCzdUO857UhQQ_0[TM__SRd76hP9cMfCzdUO857UhQQ_4+0];
}
TM__SRd76hP9cMfCzdUO857UhQQ_0[2].len = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].kind = 2; TM__SRd76hP9cMfCzdUO857UhQQ_0[2].sons = &TM__SRd76hP9cMfCzdUO857UhQQ_2_2[0];
NTI__kEF5c4A3mE0Q9aypt5hX8aw_.node = &TM__SRd76hP9cMfCzdUO857UhQQ_0[2];
}

Stats

  • Started 2024-06-07T13:55:10
  • Finished 2024-06-07T13:55:10
  • Duration

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      nnkPostfix.newTree(
        newIdentNode("*"),
        newIdentNode("Flags")
      ),
      newEmptyNode(),
      nnkEnumTy.newTree(
        newEmptyNode(),
        newIdentNode("A"),
        newIdentNode("B")
      )
    ),
    nnkTypeDef.newTree(
      nnkPragmaExpr.newTree(
        nnkPostfix.newTree(
          newIdentNode("*"),
          newIdentNode("Mask")
        ),
        nnkPragma.newTree(
          nnkExprColonExpr.newTree(
            newIdentNode("size"),
            nnkCall.newTree(
              newIdentNode("sizeof"),
              newIdentNode("uint16")
            )
          )
        )
      ),
      newEmptyNode(),
      nnkBracketExpr.newTree(
        newIdentNode("set"),
        newIdentNode("Flags")
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("check"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newEmptyNode(),
      nnkIdentDefs.newTree(
        newIdentNode("flags"),
        newIdentNode("Mask"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkCommand.newTree(
        newIdentNode("echo"),
        newIdentNode("flags")
      )
    )
  ),
  nnkCommand.newTree(
    newIdentNode("check"),
    nnkCurly.newTree(
      newIdentNode("A"),
      newIdentNode("B")
    )
  )
)
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.3
  • Created 2024-06-07T13:54:25Z
  • Comments 1
  • Commands nim cpp --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 22 minutes bisecting 8 commits at 0 commits per second

@juancarlospaco
Copy link
Collaborator

Looks like it never really worked properly in cpp (?). 🤔

@demotomohiro
Copy link
Contributor

It seems size pragma to set type is not supported:
#21696
#21789

@juancarlospaco
Copy link
Collaborator

Maybe @jmgomez has any hint(?). 🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants