Closed gcr closed 4 months ago
Removing the break
hides the issue.
The diff between the two generated codes is illuminating. Without the break
, the flow jumps much farther to BeforeRet_
and the unitialized value isn't dereferenced at all.
!nim c
proc foo() =
for _ in @[1, 3, 5]:
discard "abcde"[25..<10]
break
echo "Passed"
when isMainModule:
foo()
!nim c
proc foo() =
for _ in @[1, 3, 5]:
discard "abcde"[25..<10]
break
echo "Passed"
when isMainModule:
foo()
98.38 Kb (100,736 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
FR_.line = n;
#define nimlf_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA;
struct tySequence__qwqHTkRvwhrRyENtudHQ7g {
NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA {
NI a;
NI b;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void);
N_LIB_PRIVATE N_NIMCALL(void*, newSeqPayload)(NI cap_p0, NI elemSize_p1, NI elemAlign_p2);
N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i_p0, NI n_p1);
static N_INLINE(NimStringV2, X5BX5D___temp_u91)(NimStringV2 s_p0, tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA x_p1);
N_LIB_PRIVATE N_NOINLINE(void, raiseOverflow)(void);
N_NIMCALL(NimStringV2, mnewString)(NI len_p0);
N_LIB_PRIVATE N_NOINLINE(void, raiseRangeErrorI)(NI64 i_p0, NI64 a_p1, NI64 b_p2);
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimPrepareStrMutationImpl__system_u2413)(NimStringV2* s_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4608)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA, dotdot___temp_u34)(NI a_p0, NI b_p1);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u128)(tySequence__qwqHTkRvwhrRyENtudHQ7g dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u254)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
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);
static const struct {
NI cap; NIM_CHAR data[5+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 5 | NIM_STRLIT_FLAG, "abcde" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {5, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[147+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_8 = { 147 | NIM_STRLIT_FLAG, "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_9 = {147, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_8};
static const struct {
NI cap; NIM_CHAR data[6+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_11 = { 6 | NIM_STRLIT_FLAG, "Passed" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_10 = {{6, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_11}}
;
extern NIM_THREADVAR TFrame* framePtr__system_u2688;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4392;
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0) {
{
NIM_BOOL T3_;
T3_ = (NIM_BOOL)0;
T3_ = !(((*s_p0).p == ((NimStrPayload*) NIM_NIL)));
if (!(T3_)) goto LA4_;
T3_ = ((NI)((*(*s_p0).p).cap & ((NI)IL64(4611686018427387904))) == ((NI)IL64(4611686018427387904)));
LA4_: ;
if (!T3_) goto LA5_;
nimPrepareStrMutationImpl__system_u2413(s_p0);
}
LA5_: ;
}
static N_INLINE(void, nimFrame)(TFrame* s_p0) {
{
if (!(framePtr__system_u2688 == ((TFrame*) NIM_NIL))) goto LA3_;
(*s_p0).calldepth = ((NI16)0);
}
goto LA1_;
LA3_: ;
{
(*s_p0).calldepth = (NI16)((*framePtr__system_u2688).calldepth + ((NI16)1));
}
LA1_: ;
(*s_p0).prev = framePtr__system_u2688;
framePtr__system_u2688 = s_p0;
{
if (!((*s_p0).calldepth == ((NI16)2000))) goto LA8_;
callDepthLimitReached__system_u4608();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__system_u2688 = (*framePtr__system_u2688).prev;
}
static N_INLINE(NimStringV2, X5BX5D___temp_u91)(NimStringV2 s_p0, tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA x_p1) {
NimStringV2 result;
NI a;
NI L;
NI TM__SRd76hP9cMfCzdUO857UhQQ_2;
NI TM__SRd76hP9cMfCzdUO857UhQQ_3;
nimfr_("[]", "/home/runner/.choosenim/toolchains/nim-#devel/lib/system/indices.nim");
{ a = x_p1.a;
if (nimSubInt(x_p1.b, a, &TM__SRd76hP9cMfCzdUO857UhQQ_2)) { raiseOverflow(); goto BeforeRet_;
};
if (nimAddInt((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_2), ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_3)) { raiseOverflow(); goto BeforeRet_;
};
L = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_3);
if ((L) < ((NI)0) || (L) > ((NI)IL64(9223372036854775807))){ raiseRangeErrorI(L, ((NI)0), ((NI)IL64(9223372036854775807))); goto BeforeRet_;
}
result = mnewString(((NI) (L)));
{
NI i;
NI i_2;
i = (NI)0;
i_2 = ((NI)0);
{
while (1) {
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
NI TM__SRd76hP9cMfCzdUO857UhQQ_5;
if (!(i_2 < L)) goto LA3;
i = i_2;
if (i < 0 || i >= result.len){ raiseIndexError2(i,result.len-1); goto BeforeRet_;
}
nimPrepareStrMutationV2((&result));
if (nimAddInt(i, a, &TM__SRd76hP9cMfCzdUO857UhQQ_4)) { raiseOverflow(); goto BeforeRet_;
};
if ((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) < 0 || (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) >= s_p0.len){ raiseIndexError2((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4),s_p0.len-1); goto BeforeRet_;
}
result.p->data[i] = s_p0.p->data[(NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4)];
if (nimAddInt(i_2, ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_5)) { raiseOverflow(); goto BeforeRet_;
};
i_2 = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_5);
} LA3: ;
}
}
}BeforeRet_: ;
popFrame();
return result;
}
static N_INLINE(tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA, dotdot___temp_u34)(NI a_p0, NI b_p1) {
tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA result;
nimfr_("..", "/home/runner/.choosenim/toolchains/nim-#devel/lib/system.nim");
result.a = a_p0;
result.b = b_p1;
popFrame();
return result;
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
NIM_BOOL* result;
result = (&nimInErrorMode__system_u4392);
return result;
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void) {
NIM_BOOL* nimErr_;
nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
{
tySequence__qwqHTkRvwhrRyENtudHQ7g colontmp_;
NI* _;
NI i;
NI L;
NI T3_;
colontmp_.len = 0; colontmp_.p = NIM_NIL;
_ = (NI*)0;
colontmp_.len = 3; colontmp_.p = (tySequence__qwqHTkRvwhrRyENtudHQ7g_Content*) newSeqPayload(3, sizeof(NI), NIM_ALIGNOF(NI));
colontmp_.p->data[0] = ((NI)1);
colontmp_.p->data[1] = ((NI)3);
colontmp_.p->data[2] = ((NI)5);
i = ((NI)0);
T3_ = colontmp_.len;
L = T3_;
{
while (1) {
NimStringV2 colontmpD_;
tyObject_HSlice__vuwRJgdcPWbEO9cIdyL6bxA T7_;
if (!(i < L)) goto LA5;
colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
if (i < 0 || i >= colontmp_.len){ raiseIndexError2(i,colontmp_.len-1); goto LA6_;
}
_ = (&colontmp_.p->data[i]);
T7_ = dotdot___temp_u34(((NI)25), ((NI)9));
colontmpD_ = X5BX5D___temp_u91(TM__SRd76hP9cMfCzdUO857UhQQ_7, T7_);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
(void)(colontmpD_);
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
eqdestroy___temp_u128(colontmp_);
goto LA1;
i += ((NI)1);
{
NI T10_;
T10_ = colontmp_.len;
if (!!((T10_ == L))) goto LA11_;
failedAssertImpl__stdZassertions_u254(TM__SRd76hP9cMfCzdUO857UhQQ_9);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
}
LA11_: ;
{
LA6_:;
}
{
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
}
if (NIM_UNLIKELY(*nimErr_)) goto LA2_;
} LA5: ;
}
{
LA2_:;
}
{
eqdestroy___temp_u128(colontmp_);
}
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
} LA1: ;
echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_10, 1);
}BeforeRet_: ;
popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
void (*volatile inner)(void);
inner = PreMainInner;
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
(*inner)();
#else
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminusathdevelatslibatssystemdotnim_Init000();
PreMainInner();
#endif
}
N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
NimMainModule();
}
N_CDECL(void, NimMain)(void) {
#if 0
void (*volatile inner)(void);
PreMain();
inner = NimMainInner;
(*inner)();
#else
PreMain();
NimMainInner();
#endif
}
int main(int argc, char** args, char** env) {
cmdLine = args;
cmdCount = argc;
gEnv = env;
NimMain();
return nim_program_result;
}
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
{
NIM_BOOL* nimErr_;
nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim");
nimErr_ = nimErrorFlag();
foo__temp_u1();
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
BeforeRet_: ;
nimTestErrorFlag();
popFrame();
}
}
```
2024-03-25T02:44:57
2024-03-25T02:44:58
96.27 Kb (98,576 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
FR_.line = n;
#define nimlf_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ;
struct tySequence__qwqHTkRvwhrRyENtudHQ7g {
NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ {
NI a;
NI b;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void);
N_LIB_PRIVATE N_NIMCALL(void*, newSeqPayload)(NI cap_p0, NI elemSize_p1, NI elemAlign_p2);
N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i_p0, NI n_p1);
static N_INLINE(NimStringV2, X5BX5D___temp_u93)(NimStringV2 s_p0, tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ x_p1);
N_LIB_PRIVATE N_NOINLINE(void, raiseOverflow)(void);
N_NIMCALL(NimStringV2, mnewString)(NI len_p0);
N_LIB_PRIVATE N_NOINLINE(void, raiseRangeErrorI)(NI64 i_p0, NI64 a_p1, NI64 b_p2);
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimPrepareStrMutationImpl__system_u2440)(NimStringV2* s_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ, dotdot___temp_u36)(NI a_p0, NI b_p1);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u130)(tySequence__qwqHTkRvwhrRyENtudHQ7g dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[5+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 5 | NIM_STRLIT_FLAG, "abcde" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {5, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[146+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_9 = { 146 | NIM_STRLIT_FLAG, "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_10 = {146, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_9};
static const struct {
NI cap; NIM_CHAR data[6+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_12 = { 6 | NIM_STRLIT_FLAG, "Passed" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_11 = {{6, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_12}}
;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0) {
{
NIM_BOOL T3_;
T3_ = (NIM_BOOL)0;
T3_ = !(((*s_p0).p == ((NimStrPayload*) NIM_NIL)));
if (!(T3_)) goto LA4_;
T3_ = ((NI)((*(*s_p0).p).cap & ((NI)IL64(4611686018427387904))) == ((NI)IL64(4611686018427387904)));
LA4_: ;
if (!T3_) goto LA5_;
nimPrepareStrMutationImpl__system_u2440(s_p0);
}
LA5_: ;
}
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_u4621();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
static N_INLINE(NimStringV2, X5BX5D___temp_u93)(NimStringV2 s_p0, tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ x_p1) {
NimStringV2 result;
NI a;
NI L;
NI TM__SRd76hP9cMfCzdUO857UhQQ_2;
NI TM__SRd76hP9cMfCzdUO857UhQQ_3;
nimfr_("[]", "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/indices.nim");
{ a = x_p1.a;
if (nimSubInt(x_p1.b, a, &TM__SRd76hP9cMfCzdUO857UhQQ_2)) { raiseOverflow(); goto BeforeRet_;
};
if (nimAddInt((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_2), ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_3)) { raiseOverflow(); goto BeforeRet_;
};
L = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_3);
if ((L) < ((NI)0) || (L) > ((NI)IL64(9223372036854775807))){ raiseRangeErrorI(L, ((NI)0), ((NI)IL64(9223372036854775807))); goto BeforeRet_;
}
result = mnewString(((NI) (L)));
{
NI i;
NI i_2;
i = (NI)0;
i_2 = ((NI)0);
{
while (1) {
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
NI TM__SRd76hP9cMfCzdUO857UhQQ_5;
if (!(i_2 < L)) goto LA3;
i = i_2;
if (i < 0 || i >= result.len){ raiseIndexError2(i,result.len-1); goto BeforeRet_;
}
nimPrepareStrMutationV2((&result));
if (nimAddInt(i, a, &TM__SRd76hP9cMfCzdUO857UhQQ_4)) { raiseOverflow(); goto BeforeRet_;
};
if ((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) < 0 || (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) >= s_p0.len){ raiseIndexError2((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4),s_p0.len-1); goto BeforeRet_;
}
result.p->data[i] = s_p0.p->data[(NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4)];
if (nimAddInt(i_2, ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_5)) { raiseOverflow(); goto BeforeRet_;
};
i_2 = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_5);
} LA3: ;
}
}
}BeforeRet_: ;
popFrame();
return result;
}
static N_INLINE(tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ, dotdot___temp_u36)(NI a_p0, NI b_p1) {
tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ result;
nimfr_("..", "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system.nim");
result.a = a_p0;
result.b = b_p1;
popFrame();
return result;
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
NIM_BOOL* result;
result = (&nimInErrorMode__system_u4403);
return result;
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void) {
NIM_BOOL* nimErr_;
nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
{
tySequence__qwqHTkRvwhrRyENtudHQ7g colontmp_;
NI* _;
NI i;
NI L;
NI T3_;
colontmp_.len = 0; colontmp_.p = NIM_NIL;
_ = (NI*)0;
colontmp_.len = 3; colontmp_.p = (tySequence__qwqHTkRvwhrRyENtudHQ7g_Content*) newSeqPayload(3, sizeof(NI), NIM_ALIGNOF(NI));
colontmp_.p->data[0] = ((NI)1);
colontmp_.p->data[1] = ((NI)3);
colontmp_.p->data[2] = ((NI)5);
i = ((NI)0);
T3_ = colontmp_.len;
L = T3_;
{
while (1) {
NimStringV2 colontmpD_;
tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ T7_;
NI TM__SRd76hP9cMfCzdUO857UhQQ_8;
if (!(i < L)) goto LA5;
colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
if (i < 0 || i >= colontmp_.len){ raiseIndexError2(i,colontmp_.len-1); goto LA6_;
}
_ = (&colontmp_.p->data[i]);
T7_ = dotdot___temp_u36(((NI)25), ((NI)9));
colontmpD_ = X5BX5D___temp_u93(TM__SRd76hP9cMfCzdUO857UhQQ_7, T7_);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
(void)(colontmpD_);
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
eqdestroy___temp_u130(colontmp_);
goto LA1;
if (nimAddInt(i, ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_8)) { raiseOverflow(); goto LA6_;
};
i = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_8);
{
NI T10_;
T10_ = colontmp_.len;
if (!!((T10_ == L))) goto LA11_;
failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_10);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
}
LA11_: ;
{
LA6_:;
}
{
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
}
if (NIM_UNLIKELY(*nimErr_)) goto LA2_;
} LA5: ;
}
{
LA2_:;
}
{
eqdestroy___temp_u130(colontmp_);
}
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
} LA1: ;
echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_11, 1);
}BeforeRet_: ;
popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
void (*volatile inner)(void);
inner = PreMainInner;
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
(*inner)();
#else
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_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();
foo__temp_u1();
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
BeforeRet_: ;
nimTestErrorFlag();
popFrame();
}
}
```
2024-03-25T02:44:58
2024-03-25T02:44:59
96.27 Kb (98,576 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#define nimfr_(proc, file) \
TFrame FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
#define nimfrs_(proc, file, slots, length) \
struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename;NI len;VarSlot s[slots];} FR_; \
FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
#define nimln_(n) \
FR_.line = n;
#define nimlf_(n, file) \
FR_.line = n; FR_.filename = file;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g;
typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content;
typedef struct NimStrPayload NimStrPayload;
typedef struct NimStringV2 NimStringV2;
typedef struct tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ;
struct tySequence__qwqHTkRvwhrRyENtudHQ7g {
NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p;
};
struct NimStrPayload {
NI cap;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct NimStringV2 {
NI len;
NimStrPayload* p;
};
struct tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ {
NI a;
NI b;
};
typedef NimStringV2 tyArray__nHXaesL0DJZHyVS07ARPRA[1];
struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE]; };
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void);
N_LIB_PRIVATE N_NIMCALL(void*, newSeqPayload)(NI cap_p0, NI elemSize_p1, NI elemAlign_p2);
N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i_p0, NI n_p1);
static N_INLINE(NimStringV2, X5BX5D___temp_u93)(NimStringV2 s_p0, tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ x_p1);
N_LIB_PRIVATE N_NOINLINE(void, raiseOverflow)(void);
N_NIMCALL(NimStringV2, mnewString)(NI len_p0);
N_LIB_PRIVATE N_NOINLINE(void, raiseRangeErrorI)(NI64 i_p0, NI64 a_p1, NI64 b_p2);
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0);
N_LIB_PRIVATE N_NIMCALL(void, nimPrepareStrMutationImpl__system_u2440)(NimStringV2* s_p0);
static N_INLINE(void, nimFrame)(TFrame* s_p0);
N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_u4621)(void);
static N_INLINE(void, popFrame)(void);
static N_INLINE(tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ, dotdot___temp_u36)(NI a_p0, NI b_p1);
N_LIB_PRIVATE N_NOCONV(void, deallocShared)(void* p_p0);
N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___temp_u130)(tySequence__qwqHTkRvwhrRyENtudHQ7g dest_p0);
N_LIB_PRIVATE N_NIMCALL(void, failedAssertImpl__stdZassertions_u310)(NimStringV2 msg_p0);
N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringV2* args_p0, NI args_p0Len_0);
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void);
N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000)(void);
N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
static const struct {
NI cap; NIM_CHAR data[5+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_6 = { 5 | NIM_STRLIT_FLAG, "abcde" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_7 = {5, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_6};
static const struct {
NI cap; NIM_CHAR data[146+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_9 = { 146 | NIM_STRLIT_FLAG, "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it" };
static const NimStringV2 TM__SRd76hP9cMfCzdUO857UhQQ_10 = {146, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_9};
static const struct {
NI cap; NIM_CHAR data[6+1];
} TM__SRd76hP9cMfCzdUO857UhQQ_12 = { 6 | NIM_STRLIT_FLAG, "Passed" };
static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__SRd76hP9cMfCzdUO857UhQQ_11 = {{6, (NimStrPayload*)&TM__SRd76hP9cMfCzdUO857UhQQ_12}}
;
extern NIM_THREADVAR TFrame* framePtr__system_u4020;
extern NIM_THREADVAR NIM_BOOL nimInErrorMode__system_u4403;
static N_INLINE(void, nimPrepareStrMutationV2)(NimStringV2* s_p0) {
{
NIM_BOOL T3_;
T3_ = (NIM_BOOL)0;
T3_ = !(((*s_p0).p == ((NimStrPayload*) NIM_NIL)));
if (!(T3_)) goto LA4_;
T3_ = ((NI)((*(*s_p0).p).cap & ((NI)IL64(4611686018427387904))) == ((NI)IL64(4611686018427387904)));
LA4_: ;
if (!T3_) goto LA5_;
nimPrepareStrMutationImpl__system_u2440(s_p0);
}
LA5_: ;
}
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_u4621();
}
LA8_: ;
}
static N_INLINE(void, popFrame)(void) {
framePtr__system_u4020 = (*framePtr__system_u4020).prev;
}
static N_INLINE(NimStringV2, X5BX5D___temp_u93)(NimStringV2 s_p0, tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ x_p1) {
NimStringV2 result;
NI a;
NI L;
NI TM__SRd76hP9cMfCzdUO857UhQQ_2;
NI TM__SRd76hP9cMfCzdUO857UhQQ_3;
nimfr_("[]", "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system/indices.nim");
{ a = x_p1.a;
if (nimSubInt(x_p1.b, a, &TM__SRd76hP9cMfCzdUO857UhQQ_2)) { raiseOverflow(); goto BeforeRet_;
};
if (nimAddInt((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_2), ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_3)) { raiseOverflow(); goto BeforeRet_;
};
L = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_3);
if ((L) < ((NI)0) || (L) > ((NI)IL64(9223372036854775807))){ raiseRangeErrorI(L, ((NI)0), ((NI)IL64(9223372036854775807))); goto BeforeRet_;
}
result = mnewString(((NI) (L)));
{
NI i;
NI i_2;
i = (NI)0;
i_2 = ((NI)0);
{
while (1) {
NI TM__SRd76hP9cMfCzdUO857UhQQ_4;
NI TM__SRd76hP9cMfCzdUO857UhQQ_5;
if (!(i_2 < L)) goto LA3;
i = i_2;
if (i < 0 || i >= result.len){ raiseIndexError2(i,result.len-1); goto BeforeRet_;
}
nimPrepareStrMutationV2((&result));
if (nimAddInt(i, a, &TM__SRd76hP9cMfCzdUO857UhQQ_4)) { raiseOverflow(); goto BeforeRet_;
};
if ((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) < 0 || (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4) >= s_p0.len){ raiseIndexError2((NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4),s_p0.len-1); goto BeforeRet_;
}
result.p->data[i] = s_p0.p->data[(NI)(TM__SRd76hP9cMfCzdUO857UhQQ_4)];
if (nimAddInt(i_2, ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_5)) { raiseOverflow(); goto BeforeRet_;
};
i_2 = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_5);
} LA3: ;
}
}
}BeforeRet_: ;
popFrame();
return result;
}
static N_INLINE(tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ, dotdot___temp_u36)(NI a_p0, NI b_p1) {
tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ result;
nimfr_("..", "/home/runner/.choosenim/toolchains/nim-2.0.2/lib/system.nim");
result.a = a_p0;
result.b = b_p1;
popFrame();
return result;
}
static N_INLINE(NIM_BOOL*, nimErrorFlag)(void) {
NIM_BOOL* result;
result = (&nimInErrorMode__system_u4403);
return result;
}
N_LIB_PRIVATE N_NIMCALL(void, foo__temp_u1)(void) {
NIM_BOOL* nimErr_;
nimfr_("foo", "/home/runner/work/Nim/Nim/temp.nim");
{nimErr_ = nimErrorFlag();
{
tySequence__qwqHTkRvwhrRyENtudHQ7g colontmp_;
NI* _;
NI i;
NI L;
NI T3_;
colontmp_.len = 0; colontmp_.p = NIM_NIL;
_ = (NI*)0;
colontmp_.len = 3; colontmp_.p = (tySequence__qwqHTkRvwhrRyENtudHQ7g_Content*) newSeqPayload(3, sizeof(NI), NIM_ALIGNOF(NI));
colontmp_.p->data[0] = ((NI)1);
colontmp_.p->data[1] = ((NI)3);
colontmp_.p->data[2] = ((NI)5);
i = ((NI)0);
T3_ = colontmp_.len;
L = T3_;
{
while (1) {
NimStringV2 colontmpD_;
tyObject_HSlice__Lvf9biZHqTuFCIXux82nvqQ T7_;
NI TM__SRd76hP9cMfCzdUO857UhQQ_8;
if (!(i < L)) goto LA5;
colontmpD_.len = 0; colontmpD_.p = NIM_NIL;
if (i < 0 || i >= colontmp_.len){ raiseIndexError2(i,colontmp_.len-1); goto LA6_;
}
_ = (&colontmp_.p->data[i]);
T7_ = dotdot___temp_u36(((NI)25), ((NI)9));
colontmpD_ = X5BX5D___temp_u93(TM__SRd76hP9cMfCzdUO857UhQQ_7, T7_);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
(void)(colontmpD_);
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
eqdestroy___temp_u130(colontmp_);
goto LA1;
if (nimAddInt(i, ((NI)1), &TM__SRd76hP9cMfCzdUO857UhQQ_8)) { raiseOverflow(); goto LA6_;
};
i = (NI)(TM__SRd76hP9cMfCzdUO857UhQQ_8);
{
NI T10_;
T10_ = colontmp_.len;
if (!!((T10_ == L))) goto LA11_;
failedAssertImpl__stdZassertions_u310(TM__SRd76hP9cMfCzdUO857UhQQ_10);
if (NIM_UNLIKELY(*nimErr_)) goto LA6_;
}
LA11_: ;
{
LA6_:;
}
{
if (colontmpD_.p && !(colontmpD_.p->cap & NIM_STRLIT_FLAG)) {
deallocShared(colontmpD_.p);
}
}
if (NIM_UNLIKELY(*nimErr_)) goto LA2_;
} LA5: ;
}
{
LA2_:;
}
{
eqdestroy___temp_u130(colontmp_);
}
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
} LA1: ;
echoBinSafe(TM__SRd76hP9cMfCzdUO857UhQQ_11, 1);
}BeforeRet_: ;
popFrame();
}
N_LIB_PRIVATE void PreMainInner(void) {
}
N_LIB_PRIVATE int cmdCount;
N_LIB_PRIVATE char** cmdLine;
N_LIB_PRIVATE char** gEnv;
N_LIB_PRIVATE void PreMain(void) {
#if 0
void (*volatile inner)(void);
inner = PreMainInner;
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_Init000();
(*inner)();
#else
atmdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus2dot0dot2atslibatssystemdotnim_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();
foo__temp_u1();
if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
BeforeRet_: ;
nimTestErrorFlag();
popFrame();
}
}
```
2024-03-25T02:44:59
2024-03-25T02:45:00
104.76 Kb (107,272 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:45:02
2024-03-25T02:45:03
97.47 Kb (99,808 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:45:05
2024-03-25T02:45:06
97.52 Kb (99,856 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:45:08
2024-03-25T02:45:08
92.56 Kb (94,784 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:45:10
2024-03-25T02:45:11
11.4.0
14.0.0
19.1
2024-03-25T02:44:28Z
3
nim c --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
:robot: Bug found in 17 minutes
bisecting 7
commits at 0
commits per second
!nim c --gc:refc
proc foo() =
for _ in @[1, 3, 5]:
discard "abcde"[25..<10]
break
echo "Passed"
when isMainModule:
foo()
106.84 Kb (109,400 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:46:52
2024-03-25T02:46:52
106.81 Kb (109,376 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:46:53
2024-03-25T02:46:53
106.81 Kb (109,376 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:46:54
2024-03-25T02:46:54
104.76 Kb (107,272 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:46:57
2024-03-25T02:46:58
97.47 Kb (99,808 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:47:00
2024-03-25T02:47:01
97.52 Kb (99,856 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:47:03
2024-03-25T02:47:04
92.56 Kb (94,784 bytes)
```cpp
#define NIM_INTBITS 64
#include "nimbase.h"
#include 2024-03-25T02:47:06
2024-03-25T02:47:06
11.4.0
14.0.0
19.1
2024-03-25T02:46:22Z
5
nim c --gc:refc --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
:robot: Bug found in 18 minutes
bisecting 7
commits at 0
commits per second
It seems to be an issue of goto exception
related to https://github.com/nim-lang/Nim/issues/22852
Description
Inside
proc [][Idx, T](a: var array[Idx, T]; i: BackwardsIndex): var T
, codegen contains an unitialized variable. In the middle of signaling a range error, the caller crashes before the traceback can be fully printed by dereferencing the uninitialized result.Here's a minimal example:
Nim Version
Current Output
Expected Output
Should throw an unhandled exception, not SIGSEGV:
Possible Solution
See my comment below about
break
.Additional Information
Watching the crash from the debugger's view, we have:
At this point,
colontmpD_
happens to contain the last thing in stack. Looks like some earlier slice object:colontmpD_
originates from the codegen forproc [][Idx, T](a: var array[Idx, T]; i: BackwardsIndex): var T
, called earlier. Ultimately,NimStringV2 result;
is unitialized before the function returns prematurely to signal the range error: