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

Calling a proc inside a tuple inside a literal array, Nim compiler generates invalid C code #20544

Open
AdamSpitz opened this issue Oct 11, 2022 · 3 comments
Labels
Closures Code Generation const `const x=expr` or `static: stmt`

Comments

@AdamSpitz
Copy link

What happened?

This gives me compile-time errors from gcc. Two questions:

  • Is this code invalid?
  • And even if this code is invalid, shouldn't the Nim compiler complain, rather than generating C code that gcc rejects?
type
  F = proc()
  T = tuple[c: F]

const
  f: F = proc() = echo "Got into the function."
  myTuple: T = (c: f)
  myLiteralArray: array[1, T] = [myTuple]

myLiteralArray[0].c()

Nim Version

Nim Compiler Version 1.7.3 [Linux: amd64]
Compiled at 2022-10-10
Copyright (c) 2006-2022 by Andreas Rumpf

git hash: 1f20750
active boot switches: -d:release

Current Standard Output Logs

No response

Expected Standard Output Logs

No response

Possible Solution

No response

Additional Information

No response

@juancarlospaco
Copy link
Collaborator

!nim c

type
  F = proc()
  T = tuple[c: F]
const
  f: F = proc() = discard
  myTuple: T = (c: f)
  myLiteralArray: array[1, T] = [myTuple]
myLiteralArray[0].c()

@github-actions
Copy link
Contributor

@juancarlospaco (contributor)

devel :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:126:33: error: request for member ‘ClE_0’ in something not a structure or union
  126 |         colonanonymous___temp_u7.ClE_0? colonanonymous___temp_u7.ClP_0(colonanonymous___temp_u7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_u7.ClP_0))();
      |                                 ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:126:65: error: request for member ‘ClP_0’ in something not a structure or union
  126 |         colonanonymous___temp_u7.ClE_0? colonanonymous___temp_u7.ClP_0(colonanonymous___temp_u7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_u7.ClP_0))();
      |                                                                 ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:126:96: error: request for member ‘ClE_0’ in something not a structure or union
  126 |         colonanonymous___temp_u7.ClE_0? colonanonymous___temp_u7.ClP_0(colonanonymous___temp_u7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_u7.ClP_0))();
      |                                                                                                ^
compilation terminated due to -fmax-errors=3.
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3   -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



Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:48:19
  • Finished 2023-07-11T19:48:20
  • Duration 1 minute
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
#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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___temp_u7)(void);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4483)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(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);
extern TFrame* framePtr__system_u3877;
extern NIM_BOOL nimInErrorMode__system_u4265;
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
	{
		if (!(framePtr__system_u3877 == ((TFrame*) NIM_NIL))) goto LA3_;
		(*s_p0).calldepth = ((NI16)0);
	}
	goto LA1_;
LA3_: ;
	{
		(*s_p0).calldepth = (NI16)((*framePtr__system_u3877).calldepth + ((NI16)1));
	}
LA1_: ;
	(*s_p0).prev = framePtr__system_u3877;
	framePtr__system_u3877 = s_p0;
	{
		if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
		callDepthLimitReached__system_u4483();
	}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
	framePtr__system_u3877 = (*framePtr__system_u3877).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___temp_u7)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	popFrame();
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
	NIM_BOOL* result;
	result = (NIM_BOOL*)0;
	result = (&nimInErrorMode__system_u4265);
	return result;
}
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();
	colonanonymous___temp_u7.ClE_0? colonanonymous___temp_u7.ClP_0(colonanonymous___temp_u7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_u7.ClP_0))();
	if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
	BeforeRet_: ;
	nimTestErrorFlag();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkTupleConstr.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
stable :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:32: error: request for member ‘ClE_0’ in something not a structure or union
  115 |         colonanonymous___temp_7.ClE_0? colonanonymous___temp_7.ClP_0(colonanonymous___temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_7.ClP_0))();
      |                                ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:63: error: request for member ‘ClP_0’ in something not a structure or union
  115 |         colonanonymous___temp_7.ClE_0? colonanonymous___temp_7.ClP_0(colonanonymous___temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_7.ClP_0))();
      |                                                               ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:93: error: request for member ‘ClE_0’ in something not a structure or union
  115 |         colonanonymous___temp_7.ClE_0? colonanonymous___temp_7.ClP_0(colonanonymous___temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_7.ClP_0))();
      |                                                                                             ^
compilation terminated due to -fmax-errors=3.
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3   -I/home/runner/.choosenim/toolchains/nim-1.6.14/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



Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:48:20
  • Finished 2023-07-11T19:48:21
  • Duration 1 minute
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___temp_7)(void);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_2997)(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, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
extern TFrame* framePtr__system_2564;
static N_INLINE(void, nimFrame)(TFrame* s) {
	{
		if (!(framePtr__system_2564 == ((TFrame*) NIM_NIL))) goto LA3_;
		(*s).calldepth = ((NI16) 0);
	}
	goto LA1_;
	LA3_: ;
	{
		(*s).calldepth = (NI16)((*framePtr__system_2564).calldepth + ((NI16) 1));
	}
	LA1_: ;
	(*s).prev = framePtr__system_2564;
	framePtr__system_2564 = s;
	{
		if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
		callDepthLimitReached__system_2997();
	}
	LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
	framePtr__system_2564 = (*framePtr__system_2564).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___temp_7)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
	nimGC_setStackBottom(locals);
}
N_LIB_PRIVATE void PreMainInner(void) {
}
	N_LIB_PRIVATE int cmdCount;
	N_LIB_PRIVATE char** cmdLine;
	N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
	void (*volatile inner)(void);
	inner = PreMainInner;
	atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_DatInit000();
	initStackBottomWith((void *)&inner);
	atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot14atslibatssystemdotnim_Init000();
	(*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");
	colonanonymous___temp_7.ClE_0? colonanonymous___temp_7.ClP_0(colonanonymous___temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___temp_7.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkTupleConstr.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
1.6.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:31: error: request for member ‘ClE_0’ in something not a structure or union
  115 |         colonanonymous__temp_7.ClE_0? colonanonymous__temp_7.ClP_0(colonanonymous__temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous__temp_7.ClP_0))();
      |                               ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:61: error: request for member ‘ClP_0’ in something not a structure or union
  115 |         colonanonymous__temp_7.ClE_0? colonanonymous__temp_7.ClP_0(colonanonymous__temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous__temp_7.ClP_0))();
      |                                                             ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:115:90: error: request for member ‘ClE_0’ in something not a structure or union
  115 |         colonanonymous__temp_7.ClE_0? colonanonymous__temp_7.ClP_0(colonanonymous__temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous__temp_7.ClP_0))();
      |                                                                                          ^
compilation terminated due to -fmax-errors=3.
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3   -I/home/runner/.choosenim/toolchains/nim-1.6.0/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



Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:48:25
  • Finished 2023-07-11T19:48:26
  • Duration 1 minute
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous__temp_7)(void);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached_system_2997)(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, NimMainModule)(void);
extern TFrame* framePtr_system_2564;
extern TFrame* framePtr_system_2564;
extern TFrame* framePtr_system_2564;
extern TFrame* framePtr_system_2564;
extern TFrame* framePtr_system_2564;
extern TFrame* framePtr_system_2564;
static N_INLINE(void, nimFrame)(TFrame* s) {
	{
		if (!(framePtr_system_2564 == ((TFrame*) NIM_NIL))) goto LA3_;
		(*s).calldepth = ((NI16) 0);
	}
	goto LA1_;
	LA3_: ;
	{
		(*s).calldepth = (NI16)((*framePtr_system_2564).calldepth + ((NI16) 1));
	}
	LA1_: ;
	(*s).prev = framePtr_system_2564;
	framePtr_system_2564 = s;
	{
		if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
		callDepthLimitReached_system_2997();
	}
	LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
	framePtr_system_2564 = (*framePtr_system_2564).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous__temp_7)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	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();
	(*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");
	colonanonymous__temp_7.ClE_0? colonanonymous__temp_7.ClP_0(colonanonymous__temp_7.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous__temp_7.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkTupleConstr.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
1.4.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:129:50: error: request for member ‘ClE_0’ in something not a structure or union
  129 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                  ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:129:99: error: request for member ‘ClP_0’ in something not a structure or union
  129 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                   ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:129:147: error: request for member ‘ClE_0’ in something not a structure or union
  129 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                                                                   ^
compilation terminated due to -fmax-errors=3.
Error: execution of an external compiler program 'gcc -c  -w -fmax-errors=3   -I/home/runner/.choosenim/toolchains/nim-1.4.0/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



Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:48:29
  • Finished 2023-07-11T19:48:30
  • Duration 1 minute
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64

#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix

  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);

N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void);
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, NimMainModule)(void);

extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;

static N_INLINE(void, nimFrame)(TFrame* s) {
	{
		if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
		(*s).calldepth = ((NI16) 0);
	}
	goto LA1_;
	LA3_: ;
	{
		(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
	}
	LA1_: ;
	(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
	{
		if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
		callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
	}
	LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	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();
	(*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");
	colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkPar.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
1.2.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:117:50: error: request for member ‘ClE_0’ in something not a structure or union
  117 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                  ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:117:99: error: request for member ‘ClP_0’ in something not a structure or union
  117 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                   ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:117:147: error: request for member ‘ClE_0’ in something not a structure or union
  117 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                                                                   ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:117:229: error: request for member ‘ClP_0’ in something not a structure or union
  117 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                                                                                                                                                     ^
Error: execution of an external compiler program 'gcc -c  -w   -I/home/runner/.choosenim/toolchains/nim-1.2.0/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



Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:48:46
  • Finished 2023-07-11T19:48:46
  • Duration 1 minute
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void);
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, NimMainModule)(void);
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimFrame)(TFrame* s) {
	{
		if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
		(*s).calldepth = ((NI16) 0);
	}
	goto LA1_;
	LA3_: ;
	{
		(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
	}
	LA1_: ;
	(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
	{
		if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
		callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
	}
	LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
	framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	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();
	(*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");
	colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkPar.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
1.0.0 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Error: execution of an external compiler program 'gcc -c  -w  -I/home/runner/.choosenim/toolchains/nim-1.0.0/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

/home/runner/work/Nim/Nim/@mtemp.nim.c: In function ‘NimMainModule’:
/home/runner/work/Nim/Nim/@mtemp.nim.c:124:50: error: request for member ‘ClE_0’ in something not a structure or union
  124 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                  ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:124:99: error: request for member ‘ClP_0’ in something not a structure or union
  124 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                   ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:124:147: error: request for member ‘ClE_0’ in something not a structure or union
  124 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                                                                   ^
/home/runner/work/Nim/Nim/@mtemp.nim.c:124:229: error: request for member ‘ClP_0’ in something not a structure or union
  124 |         colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
      |                                                                                                                                                                                                                                     ^

Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:49:00
  • Finished 2023-07-11T19:49:00
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void);
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, NimMainModule)(void);
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimFrame)(TFrame* s) {
	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, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	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();
	(*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");
	colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkPar.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
0.20.2 :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings: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(5, 3) Error: invalid type for const: F

Stats

  • Created 2023-07-11T19:47:42Z
  • Started 2023-07-11T19:49:12
  • Finished 2023-07-11T19:49:12
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

#define NIM_INTBITS 64
#include "nimbase.h"
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
  #  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 N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void);
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, NimMainModule)(void);
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimFrame)(TFrame* s) {
	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, colonanonymous___EzBZaa239as9bFx8yeHDoTOw)(void) {
	nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
	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();
	(*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");
	colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0? colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(colonanonymous___EzBZaa239as9bFx8yeHDoTOw.ClP_0))();
	popFrame();
}
}

AST

nnkStmtList.newTree(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("F"),
      newEmptyNode(),
      nnkProcTy.newTree(
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode()
      )
    ),
    nnkTypeDef.newTree(
      newIdentNode("T"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("c"),
          newIdentNode("F"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("f"),
      newIdentNode("F"),
      nnkLambda.newTree(
        newEmptyNode(),
        newEmptyNode(),
        newEmptyNode(),
        nnkFormalParams.newTree(
          newEmptyNode()
        ),
        newEmptyNode(),
        newEmptyNode(),
        nnkStmtList.newTree(
          nnkDiscardStmt.newTree(
            newEmptyNode()
          )
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myTuple"),
      newIdentNode("T"),
      nnkPar.newTree(
        nnkExprColonExpr.newTree(
          newIdentNode("c"),
          newIdentNode("f")
        )
      )
    ),
    nnkConstDef.newTree(
      newIdentNode("myLiteralArray"),
      nnkBracketExpr.newTree(
        newIdentNode("array"),
        newLit(1),
        newIdentNode("T")
      ),
      nnkBracket.newTree(
        newIdentNode("myTuple")
      )
    )
  ),
  nnkCall.newTree(
    nnkDotExpr.newTree(
      nnkBracketExpr.newTree(
        newIdentNode("myLiteralArray"),
        newLit(0)
      ),
      newIdentNode("c")
    )
  )
)
🤖 Bug found in 58 minutes bisecting 7 commits at 0 commits per second.

@metagn metagn added the const `const x=expr` or `static: stmt` label Sep 16, 2023
@metagn
Copy link
Collaborator

metagn commented Sep 8, 2024

When giving myLiteralArray its value node the compiler probably strips the hidden conversions from nimcall to closure. Can be worked around by annotating f as closure

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Closures Code Generation const `const x=expr` or `static: stmt`
Projects
None yet
3 participants