-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Regression from 1.6 to 2.0/devel with nim c -c
SIGSEGV
with template
/raises: []
#22284
Comments
!nim c --gc:arc import std/macros
macro h(): untyped =
result = newTree(nnkStmtList)
result.add quote do:
new int
type F = object
proc j[SecondarySources](
uRef: ref SecondarySources,
u: proc (config: F, sources: ref SecondarySources)): F =
u(result, uRef)
template programMain(body: untyped) =
proc main {.raises: [].} = body # doesn't SIGSEGV without this {.raises: [].}
main()
programMain:
var uRef = h()
discard j(uRef, u = proc(config: F, sources: auto) {.raises: [].} = discard) |
@ringabout (member) devel :-1: FAILOutput
Stats
IRFilesize0 bytes
ASTstable :+1: OKOutput
Stats
1.6.0 :+1: OKOutput
Stats
1.4.0 :+1: OKOutput
Stats
1.2.0 :+1: OKOutput
Stats
1.0.0 :-1: FAILOutput
Stats
IRFilesize72.77 Kb
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.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 struct tyObject_F__14lYh4oluwdYz4t36O2xQw tyObject_F__14lYh4oluwdYz4t36O2xQw;
struct tyObject_F__14lYh4oluwdYz4t36O2xQw {
char dummy;
};
typedef struct {
N_NIMCALL_PTR(void, ClP_0) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources, void* ClE_0);
void* ClE_0;
} tyProc__LZLuoUR7AaT0ACVfBEK6Dw;
typedef N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources);
typedef N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_3) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources, void* ClE_0);
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void);
N_LIB_PRIVATE N_NIMCALL(NI*, new__wSSF51wLRD8g2UFxfG6Hvg)(void);
N_LIB_PRIVATE N_NIMCALL(tyObject_F__14lYh4oluwdYz4t36O2xQw, j__iTAQnwn3njnNlgstaPAiBg)(NI* uRef, tyProc__LZLuoUR7AaT0ACVfBEK6Dw u);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)(tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___1W4b9ba7JmVflmV3cQesuiA)(NI** dest);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
void* T1_;
T1_ = (void*)0;
T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
NIM_BOOL* result;
result = (NIM_BOOL*)0;
result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
{
if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
(*s).calldepth = ((NI16) 0);
}
goto LA1_;
LA3_: ;
{
(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
}
LA1_: ;
(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
{
if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(tyObject_F__14lYh4oluwdYz4t36O2xQw, j__iTAQnwn3njnNlgstaPAiBg)(NI* uRef, tyProc__LZLuoUR7AaT0ACVfBEK6Dw u) {
tyObject_F__14lYh4oluwdYz4t36O2xQw result;
NIM_BOOL* nimErr_;
nimfr_("j", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
nimZeroMem((void*)(&result), sizeof(tyObject_F__14lYh4oluwdYz4t36O2xQw));
u.ClE_0? u.ClP_0(result, uRef, u.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(u.ClP_0))(result, uRef);
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
popFrame();
return result;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)(tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources) {
nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void) {
NI* uRef;
tyProc__LZLuoUR7AaT0ACVfBEK6Dw T2_;
tyObject_F__14lYh4oluwdYz4t36O2xQw T3_;
NIM_BOOL* nimErr_;
nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
uRef = (NI*)0;
uRef = new__wSSF51wLRD8g2UFxfG6Hvg();
nimZeroMem((void*)(&T2_), sizeof(tyProc__LZLuoUR7AaT0ACVfBEK6Dw));
T2_.ClP_0 = ((TM__SRd76hP9cMfCzdUO857UhQQ_3) (colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)); T2_.ClE_0 = NIM_NIL;
T3_ = j__iTAQnwn3njnNlgstaPAiBg(uRef, T2_);
if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
(void)(T3_);
{
LA1_:;
}
{
eqdestroy___1W4b9ba7JmVflmV3cQesuiA(&uRef);
}
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
void (*volatile inner)(void);
inner = PreMainInner;
systemDatInit000();
initStackBottomWith((void *)&inner);
systemInit000();
(*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
main__EzBZaa239as9bFx8yeHDoTOw();
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
BeforeRet_: ;
nimTestErrorFlag();
popFrame();
}
} AST0.20.2 :-1: FAILOutput
Stats
IRFilesize72.77 Kb
#define NIM_INTBITS 64
#include "nimbase.h"
#include <string.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 struct tyObject_F__14lYh4oluwdYz4t36O2xQw tyObject_F__14lYh4oluwdYz4t36O2xQw;
struct tyObject_F__14lYh4oluwdYz4t36O2xQw {
char dummy;
};
typedef struct {
N_NIMCALL_PTR(void, ClP_0) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources, void* ClE_0);
void* ClE_0;
} tyProc__LZLuoUR7AaT0ACVfBEK6Dw;
typedef N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_2) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources);
typedef N_CLOSURE_PTR(void, TM__SRd76hP9cMfCzdUO857UhQQ_3) (tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources, void* ClE_0);
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void);
N_LIB_PRIVATE N_NIMCALL(NI*, new__wSSF51wLRD8g2UFxfG6Hvg)(void);
N_LIB_PRIVATE N_NIMCALL(tyObject_F__14lYh4oluwdYz4t36O2xQw, j__iTAQnwn3njnNlgstaPAiBg)(NI* uRef, tyProc__LZLuoUR7AaT0ACVfBEK6Dw u);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
static N_INLINE(void, nimFrame)(TFrame* s);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw)(void);
static N_INLINE(void, popFrame)(void);
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)(tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___1W4b9ba7JmVflmV3cQesuiA)(NI** dest);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
static N_INLINE(void, initStackBottomWith)(void* locals);
N_LIB_PRIVATE N_NIMCALL(void, systemDatInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
extern NIM_BOOL nimInErrorMode__759bT87luu8XGcbkw13FUjA;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
extern TFrame* framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
static N_INLINE(void, nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory)(void* a, int v, NI size) {
void* T1_;
T1_ = (void*)0;
T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
NIM_BOOL* result;
result = (NIM_BOOL*)0;
result = (&nimInErrorMode__759bT87luu8XGcbkw13FUjA);
return result;
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
nimSetMem__zxfKBYntu9cBapkhrCOk1fgmemory(p, ((int) 0), size);
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s) {
{
if (!(framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA3_;
(*s).calldepth = ((NI16) 0);
}
goto LA1_;
LA3_: ;
{
(*s).calldepth = (NI16)((*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1));
}
LA1_: ;
(*s).prev = framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw;
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = s;
{
if (!((*s).calldepth == ((NI16) (((NI) 2000))))) goto LA8_;
callDepthLimitReached__mMRdr4sgmnykA9aWeM9aDZlw();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr__HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}
N_LIB_PRIVATE N_NIMCALL(tyObject_F__14lYh4oluwdYz4t36O2xQw, j__iTAQnwn3njnNlgstaPAiBg)(NI* uRef, tyProc__LZLuoUR7AaT0ACVfBEK6Dw u) {
tyObject_F__14lYh4oluwdYz4t36O2xQw result;
NIM_BOOL* nimErr_;
nimfr_("j", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
nimZeroMem((void*)(&result), sizeof(tyObject_F__14lYh4oluwdYz4t36O2xQw));
u.ClE_0? u.ClP_0(result, uRef, u.ClE_0):((TM__SRd76hP9cMfCzdUO857UhQQ_2)(u.ClP_0))(result, uRef);
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
popFrame();
return result;
}
N_LIB_PRIVATE N_NIMCALL(void, colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)(tyObject_F__14lYh4oluwdYz4t36O2xQw config, NI* sources) {
nimfr_(":anonymous", "/home/runner/work/Nim/Nim/temp.nim");
popFrame();
}
N_LIB_PRIVATE N_NIMCALL(void, main__EzBZaa239as9bFx8yeHDoTOw)(void) {
NI* uRef;
tyProc__LZLuoUR7AaT0ACVfBEK6Dw T2_;
tyObject_F__14lYh4oluwdYz4t36O2xQw T3_;
NIM_BOOL* nimErr_;
nimfr_("main", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
uRef = (NI*)0;
uRef = new__wSSF51wLRD8g2UFxfG6Hvg();
nimZeroMem((void*)(&T2_), sizeof(tyProc__LZLuoUR7AaT0ACVfBEK6Dw));
T2_.ClP_0 = ((TM__SRd76hP9cMfCzdUO857UhQQ_3) (colonanonymous___EaAvPQyx3WKJ4QgVUyHQDQ)); T2_.ClE_0 = NIM_NIL;
T3_ = j__iTAQnwn3njnNlgstaPAiBg(uRef, T2_);
if (NIM_UNLIKELY(*nimErr_)) goto LA1_;
(void)(T3_);
{
LA1_:;
}
{
eqdestroy___1W4b9ba7JmVflmV3cQesuiA(&uRef);
}
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
}BeforeRet_: ;
popFrame();
}
static N_INLINE(void, initStackBottomWith)(void* locals) {
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
void (*volatile inner)(void);
inner = PreMainInner;
systemDatInit000();
initStackBottomWith((void *)&inner);
systemInit000();
(*inner)();
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
initStackBottomWith((void *)&inner);
(*inner)();
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
main__EzBZaa239as9bFx8yeHDoTOw();
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
BeforeRet_: ;
nimTestErrorFlag();
popFrame();
}
} AST#1e15f975b ➡️ 🐛Diagnosticsringabout introduced a bug at
The bug is in the files:
The bug can be in the commits: (Diagnostics sometimes off-by-one). 43 minutes bisecting 1581 commits at 36 commits per second.
|
Related to auto: after changing auto to ref int, it raises as expected. |
To avoid Nim 2.0 issue nim-lang/Nim#22284, explicitly specify `ref SecondarySources` instead of using `auto`, and add `{.raises.}` annotation
To avoid Nim 2.0 issue nim-lang/Nim#22284, explicitly specify `ref SecondarySources` instead of using `auto`, and add `{.raises.}` annotation
by change if param == nil:
continue get when note: |
It seems that lambda might lack some semchecks because moving it into a function raises as expected |
Found the root cause |
…erred lambdas (#23368) fixes #22284 fixes #22282 ``` Error: j(uRef, proc (config: F; sources: auto) {.raises: [].} = discard ) can raise an unlisted exception: Exception ``` The problem is that `n.typ.n` contains the effectList which shouldn't appear in the parameter of a function defintion. We could not simply use `n.typ.n` as `n[paramsPos]`. The effect lists should be stripped away anyway.
…arameters of inferred lambdas (nim-lang#23368) fixes nim-lang#22284 fixes nim-lang#22282 ``` Error: j(uRef, proc (config: F; sources: auto) {.raises: [].} = discard ) can raise an unlisted exception: Exception ``` The problem is that `n.typ.n` contains the effectList which shouldn't appear in the parameter of a function defintion. We could not simply use `n.typ.n` as `n[paramsPos]`. The effect lists should be stripped away anyway.
…erred lambdas (#23368) fixes #22284 fixes #22282 ``` Error: j(uRef, proc (config: F; sources: auto) {.raises: [].} = discard ) can raise an unlisted exception: Exception ``` The problem is that `n.typ.n` contains the effectList which shouldn't appear in the parameter of a function defintion. We could not simply use `n.typ.n` as `n[paramsPos]`. The effect lists should be stripped away anyway. (cherry picked from commit 3203111)
Description
Nim 1.6 compiles and Nim 2.0/devel
SIGSEGV
when attempting to compile it. refc/ORC doesn't change results.Nim Version
Current Output
Expected Output
Possible Solution
No response
Additional Information
No response
The text was updated successfully, but these errors were encountered: