nim-lang / Nim

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
https://nim-lang.org
Other
16.5k stars 1.46k forks source link

toOpenArray can make immutable seq mutable #22372

Open Rellikeht opened 1 year ago

Rellikeht commented 1 year ago

Description

Minimal example to reproduce:

{.experimental: "views".}
let s = newSeq[int](3)

echo s

var v = toOpenArray(s, low(s), high(s))
v[1] = 2

echo s

Nim Version

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

git hash: da368885da8850c0c87e6b9dcff64393985aff27 active boot switches: -d:release

Current Output

@[0, 0, 0]
@[0, 2, 2]

Expected Output

Compile time error - creating that view shouldn't be allowed

Possible Solution

No response

Additional Information

No response

juancarlospaco commented 1 year ago

!nim c --gc:arc

{.experimental: "views".}
let s = newSeq[int](3)
var v = toOpenArray(s, low(s), high(s))
v[1] = 2
github-actions[bot] commented 1 year ago

@juancarlospaco (contributor)

devel :+1: OK

Output

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:10
  • Finished 2023-08-03T18:16:11
  • Duration 1 minute
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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
stable :+1: OK

Output

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:11
  • Finished 2023-08-03T18:16:12
  • Duration 1 minute
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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
1.6.0 :+1: OK

Output

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:15
  • Finished 2023-08-03T18:16:16
  • Duration 1 minute
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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
1.4.0 :+1: OK

Output

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:19
  • Finished 2023-08-03T18:16:19
  • Duration now
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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
1.2.0 :-1: FAIL

Output

Error: Command failed: nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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(1, 17) Error: unknown experimental feature

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:35
  • Finished 2023-08-03T18:16:35
  • Duration now
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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

Filesize 58.21 Kb ```cpp #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 struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g; typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content; struct tySequence__qwqHTkRvwhrRyENtudHQ7g { NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p; }; typedef struct { NI* Field0; NI Field1; } tyOpenArray__0HB6wOMHiJYheBmdOv6sWw; #ifndef tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP #define tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE];}; #endif N_LIB_PRIVATE N_NIMCALL(tySequence__qwqHTkRvwhrRyENtudHQ7g, newSeq__eA9b5cYyFZe7gRm4F9aRTKlA)(NI len); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError)(void); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i, NI n); N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void); N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___SAcH79b5ZePfUS16V9akl1gA)(tySequence__qwqHTkRvwhrRyENtudHQ7g* dest); static N_INLINE(void, initStackBottomWith)(void* locals); 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, systemDatInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void); N_LIB_PRIVATE tySequence__qwqHTkRvwhrRyENtudHQ7g s__3LIKhS5Wi6V7579bNnofO5g; N_LIB_PRIVATE tyOpenArray__0HB6wOMHiJYheBmdOv6sWw v__ZBo9advJ7u8QecSF0Bd4bHA; 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, initStackBottomWith)(void* locals) { } 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 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(); 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) { { NI T1_; nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim"); s__3LIKhS5Wi6V7579bNnofO5g = newSeq__eA9b5cYyFZe7gRm4F9aRTKlA(((NI) 3)); T1_ = (s__3LIKhS5Wi6V7579bNnofO5g.len-1); if (T1_-((NI) 0) != -1 && ((NU)(((NI) 0)) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len || (NU)(T1_) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len)){ raiseIndexError(); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0 = (NI*)s__3LIKhS5Wi6V7579bNnofO5g.p->data+(((NI) 0)); v__ZBo9advJ7u8QecSF0Bd4bHA.Field1 = (T1_)-(((NI) 0))+1; if ((NU)(((NI) 1)) >= (NU)(v__ZBo9advJ7u8QecSF0Bd4bHA.Field1)){ raiseIndexError2(((NI) 1),v__ZBo9advJ7u8QecSF0Bd4bHA.Field1-1); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0[((NI) 1)] = ((NI) 2); eqdestroy___SAcH79b5ZePfUS16V9akl1gA((&s__3LIKhS5Wi6V7579bNnofO5g)); BeforeRet_: ; nimTestErrorFlag(); popFrame(); } } ```

AST

```nim ```
1.0.0 :-1: FAIL

Output

``` Error: Command failed: nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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 command line(1, 2) Error: 'none', 'boehm' or 'refc' expected, but 'arc' found ```

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:48
  • Finished 2023-08-03T18:16:48
  • Duration now
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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

Filesize 58.21 Kb ```cpp #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 struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g; typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content; struct tySequence__qwqHTkRvwhrRyENtudHQ7g { NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p; }; typedef struct { NI* Field0; NI Field1; } tyOpenArray__0HB6wOMHiJYheBmdOv6sWw; #ifndef tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP #define tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE];}; #endif N_LIB_PRIVATE N_NIMCALL(tySequence__qwqHTkRvwhrRyENtudHQ7g, newSeq__eA9b5cYyFZe7gRm4F9aRTKlA)(NI len); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError)(void); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i, NI n); N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void); N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___SAcH79b5ZePfUS16V9akl1gA)(tySequence__qwqHTkRvwhrRyENtudHQ7g* dest); static N_INLINE(void, initStackBottomWith)(void* locals); 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, systemDatInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void); N_LIB_PRIVATE tySequence__qwqHTkRvwhrRyENtudHQ7g s__3LIKhS5Wi6V7579bNnofO5g; N_LIB_PRIVATE tyOpenArray__0HB6wOMHiJYheBmdOv6sWw v__ZBo9advJ7u8QecSF0Bd4bHA; 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, initStackBottomWith)(void* locals) { } 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 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(); 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) { { NI T1_; nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim"); s__3LIKhS5Wi6V7579bNnofO5g = newSeq__eA9b5cYyFZe7gRm4F9aRTKlA(((NI) 3)); T1_ = (s__3LIKhS5Wi6V7579bNnofO5g.len-1); if (T1_-((NI) 0) != -1 && ((NU)(((NI) 0)) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len || (NU)(T1_) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len)){ raiseIndexError(); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0 = (NI*)s__3LIKhS5Wi6V7579bNnofO5g.p->data+(((NI) 0)); v__ZBo9advJ7u8QecSF0Bd4bHA.Field1 = (T1_)-(((NI) 0))+1; if ((NU)(((NI) 1)) >= (NU)(v__ZBo9advJ7u8QecSF0Bd4bHA.Field1)){ raiseIndexError2(((NI) 1),v__ZBo9advJ7u8QecSF0Bd4bHA.Field1-1); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0[((NI) 1)] = ((NI) 2); eqdestroy___SAcH79b5ZePfUS16V9akl1gA((&s__3LIKhS5Wi6V7579bNnofO5g)); BeforeRet_: ; nimTestErrorFlag(); popFrame(); } } ```

AST

```nim ```
0.20.2 :-1: FAIL

Output

``` Error: Command failed: nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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 command line(1, 2) Error: 'none', 'boehm' or 'refc' expected, but 'arc' found ```

Stats

  • Created 2023-08-03T18:15:27Z
  • Started 2023-08-03T18:16:58
  • Finished 2023-08-03T18:16:58
  • Duration now
  • Commands nim c --gc:arc --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors: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

Filesize 58.21 Kb ```cpp #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 struct tySequence__qwqHTkRvwhrRyENtudHQ7g tySequence__qwqHTkRvwhrRyENtudHQ7g; typedef struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content tySequence__qwqHTkRvwhrRyENtudHQ7g_Content; struct tySequence__qwqHTkRvwhrRyENtudHQ7g { NI len; tySequence__qwqHTkRvwhrRyENtudHQ7g_Content* p; }; typedef struct { NI* Field0; NI Field1; } tyOpenArray__0HB6wOMHiJYheBmdOv6sWw; #ifndef tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP #define tySequence__qwqHTkRvwhrRyENtudHQ7g_Content_PP struct tySequence__qwqHTkRvwhrRyENtudHQ7g_Content { NI cap; NI data[SEQ_DECL_SIZE];}; #endif N_LIB_PRIVATE N_NIMCALL(tySequence__qwqHTkRvwhrRyENtudHQ7g, newSeq__eA9b5cYyFZe7gRm4F9aRTKlA)(NI len); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError)(void); N_LIB_PRIVATE N_NOINLINE(void, raiseIndexError2)(NI i, NI n); N_LIB_PRIVATE N_NIMCALL(void, nimTestErrorFlag)(void); N_LIB_PRIVATE N_NIMCALL(void, eqdestroy___SAcH79b5ZePfUS16V9akl1gA)(tySequence__qwqHTkRvwhrRyENtudHQ7g* dest); static N_INLINE(void, initStackBottomWith)(void* locals); 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, systemDatInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, systemInit000)(void); N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void); N_LIB_PRIVATE tySequence__qwqHTkRvwhrRyENtudHQ7g s__3LIKhS5Wi6V7579bNnofO5g; N_LIB_PRIVATE tyOpenArray__0HB6wOMHiJYheBmdOv6sWw v__ZBo9advJ7u8QecSF0Bd4bHA; 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, initStackBottomWith)(void* locals) { } 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 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(); 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) { { NI T1_; nimfr_("temp", "/home/runner/work/Nim/Nim/temp.nim"); s__3LIKhS5Wi6V7579bNnofO5g = newSeq__eA9b5cYyFZe7gRm4F9aRTKlA(((NI) 3)); T1_ = (s__3LIKhS5Wi6V7579bNnofO5g.len-1); if (T1_-((NI) 0) != -1 && ((NU)(((NI) 0)) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len || (NU)(T1_) >= (NU)s__3LIKhS5Wi6V7579bNnofO5g.len)){ raiseIndexError(); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0 = (NI*)s__3LIKhS5Wi6V7579bNnofO5g.p->data+(((NI) 0)); v__ZBo9advJ7u8QecSF0Bd4bHA.Field1 = (T1_)-(((NI) 0))+1; if ((NU)(((NI) 1)) >= (NU)(v__ZBo9advJ7u8QecSF0Bd4bHA.Field1)){ raiseIndexError2(((NI) 1),v__ZBo9advJ7u8QecSF0Bd4bHA.Field1-1); goto BeforeRet_; } v__ZBo9advJ7u8QecSF0Bd4bHA.Field0[((NI) 1)] = ((NI) 2); eqdestroy___SAcH79b5ZePfUS16V9akl1gA((&s__3LIKhS5Wi6V7579bNnofO5g)); BeforeRet_: ; nimTestErrorFlag(); popFrame(); } } ```

AST

```nim ```
??? :arrow_right: :bug:

Diagnostics

The commit that introduced the bug can not be found, but the bug is in the commits: (Can not find the commit because Nim can not be re-built commit-by-commit to bisect).
:robot: Bug found in 20 minutes bisecting 8 commits at 0 commits per second.