Nim versions 2.2.0 and 2.0.10 released
02 October 2024 The Nim Team
The Nim Team is happy to announce two releases:
- version 2.2.0, our new stable release
- version 2.0.10, a patch release for Nim 2.0
Nim v2.2.0 is a continuation of our efforts to improve Nim 2: it contains almost 1000 new commits, bringing improvements to the ORC memory management and to the language and the compiler overall.
Nim v2.0.10 is a patch release aimed at our enterprise users who cannot immediately switch to Nim 2.2, containing 80 commits with bugfixes.
Nim 2.2.0
Release highlights
Many long-standing compiler bugs with generics, typedesc
and static
types have been fixed in this release, effectively making these features stable.
In particular, arbitrary expressions for types and values in generic types are now largely functional when they only worked in specific cases before.
The release has a focus on bugfixes in general, with many other issues fixed across the board.
This release continues with the improvements regarding C++ interop:
noInit
can be used in types and fields to disable member initializers in the C++ backend.- C++ custom constructors initializers.
member
can be used to attach a procedure to a C++ type.- Inside a C++ constructor,
result
can be used to access the created object rather thanthis
.
The JS backend now supports lambda lifting for closures and closure iterators.
Methods now support implementations based on a VTable by using --experimental:vtables
.
Methods are then confined to the same module where their type has been defined.
Tuple unpacking got a bit more powerful:
- Tuple unpacking assignment now supports using underscores to discard values.
var a, c: int (a, _, c) = (1, 2, 3)
- Tuple unpacking variable declarations now support type annotations, but
only for the entire tuple.
let (a, b): (int, int) = (1, 2) let (a, (b, c)): (byte, (float, cstring)) = (1, (2, "abc"))
An experimental switch --experimental:openSym
has been added to deal with issues with symbol captures inside generic routines & templates.
For macro authors, this adds a new node kind nnkOpenSym
that may need to be handled differently (similar to nnkOpenSymChoice
). See the full changelog for details.
Nim 2.2.0 ships with Nimble 0.16.1, which brings a SAT solver as an opt-in option.
For a full changelog, see here.
A complete list of changes is available here.
All bugfixes are listed at the bottom of this blogpost.
Installing Nim 2.2.0
Check out if the package manager of your OS already ships version 2.2.0 or install it as described here.
If you have installed a previous version of Nim using choosenim
,
getting Nim 2.2.0 is as easy as:
$ choosenim update self
$ choosenim update stable
Make sure that the version of choosenim you have installed is 0.8.5 or higher, otherwise visit choosenim’s repo and see there how to re-install it first, before updating Nim.
Alternatively, you can download Nim 2.2.0 from our nightlies builds.
Nim 2.0.10
A complete list of changes in Nim 2.0.10 is available here.
Installing Nim 2.0.10
If you have installed a previous version of Nim using choosenim
,
getting Nim 2.0.10 is as easy as:
$ choosenim update self
$ choosenim 2.0.10
Make sure that the version of choosenim you have installed is 0.8.5 or higher, otherwise visit choosenim’s repo and see there how to re-install it first, before updating Nim.
Alternatively, you can download Nim 2.0.10 from our nightlies builds.
Bugfixes
Nim 2.0.10
- Fixed “
Error: generic instantiation too nested
after using manycompiles(...)
” (#23790) - Fixed “system.=destroy does not accept non-var types” (#22286)
- Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception
Exception
” (#23129) - Fixed “Different memory usage behavior with Nim 2.0.0 vs 1.6.x” (#22510)
- Fixed “Bad CPP codegen when using var array[] argument type in imported C functions.” (#23796)
- Fixed “passing string to
parseutils.parseFloat(openArray[char],...)
in compile-time leads to inner errorFieldDefect
” (#23936) - Fixed “Memory corruption with
lent
and ORC” (#23973) - Fixed “Pushing a hint off “disables” code reordering” (#24053)
- Fixed “SIGSEGV when slicing
string
orseq[T]
with index out of range” (#22852) - Fixed “tasks.toTask Doesn’t Expect a Dot Expression” (#23635)
- Fixed “Duplicate libraries linker warning (i.e., ‘-lm’) when importing std/math” (#22798)
- Fixed “Deadloop in Windows,
os.sleep(-1)
” (#23732) - Fixed “waitForExit() with timeout hangs on already dead processes on Linux” (#5091)
- Fixed “Missing range check in
toOpenArray
” (#20865) - Fixed “
ptr UncheckedArray
toopenArray
conversion: resultingopenArray
can have wrong mutability” (#19171) - Fixed “succ raise OverflowDefect, succ does not handle unsigned integers correctly” (#23894)
- Fixed “Valid uint64 literal says -72057594037927936 can’t be converted to uint64.” (#14522)
- Fixed “Improper code generation for cross-compilation using arm-none-eabi-gcc” (#23817)
- Fixed “uint8 > 8 bit at compile-time” (#23954)
- Fixed “Invalid type in
nkWhenStmt
” (#23945) - Fixed “Invalid type checking for two instances of the same Generic type” (#22826)
- Fixed “Invalid generic type deduction with distinct, static “ (#23445)
- Fixed “with
{.push deprecated.}
, getunhandled exception: ast.nim(1073, 3)
result == nil or result.kind == nkPragma[AssertionDefect]
” (#24167)
Nim 2.2.0
- Fixed “
-d:useMalloc
broken with--mm:none
and threads on” (#22262) - Fixed “
rand(bool)
always returnsfalse
” (#22360) - Fixed “Compiler crashes with staticBoundsCheck on” (#22362)
- Fixed “Allow
libffi
to work viakoch boot
” (#22322) - Fixed “Unspecified generic on default value segfaults the compiler” (#20883)
- Fixed “[ARC] Global variable declared in a block is destroyed too early” (#15005)
- Fixed “error: call to undeclared function ‘nimlf_’” (#22287)
- Fixed “Undefined behavior when with
hash(...)
on non-aligned bytes due tomurmurHash
cast[ptr int32]
” (#22387) - Fixed “Passing Natural to bitops.BitsRange[T] parameter in generic proc is compile error” (#18823)
- Fixed “Illegal capture when should be legal? (part 2)” (#20891)
- Fixed “async/closure environment does not align local variables” (#22419)
- Fixed “nim compiler assertion fail when literal integer is passed as template argument for array size” (#12938)
- Fixed “Crash of compiler on array type check” (#5780)
- Fixed “Can’t instantiate generic in some cases” (#21760)
- Fixed “Borrowing std/times.format causes “Error: illformed AST”” (#19304)
- Fixed “internal error: inconsistent environment type” (#18103)
- Fixed “Compiler crash when a tuple iterator with
when nimvm
is iterated in a closure iterator” (#17045) - Fixed “nimsuggest: Incorrect error reported during overload resolution with procedures with static parameters” (#22448)
- Fixed “Exceptions in top level statements of submodule not being reported/handled” (#22469)
- Fixed “
when
picks wrong branch withstatic int
” (#22474) - Fixed “Undefined behavior with
set
card()
on non-aligned pointer fromcardSetImpl
/countBits64cast
onptr uint64
” (#22481) - Fixed “Regression from 1.6.14 to 2.0.0 - nimble test crashes with a core dump” (#22357)
- Fixed “Make
newStringUninit
available in the VM [backport]” (#22748) - Fixed “[docs] broken link to sha-2 in “see also” section for sha-1” (#22441)
- Fixed “Debugging/stepping is broken in 2.0.0 and 2.1.1” (#22366)
- Fixed “Testament fails “reject”-test when compile-error originates from file other than test-file” (#22514)
- Fixed “returning string inside a loop unnecessarily generates
=sink
” (#21722) - Fixed “docs: Search CSS broken on devel” (#22492)
- Fixed “
elementType
fromstd/typetraits
doesn’t work in generic procs” (#21532) - Fixed “peg matchLen can raise an unlisted exception: Exception” (#22541)
- Fixed ““environment misses” for type reference in iterator access nested in closure” (#22548)
- Fixed “Adding an element to a seq ptr captured in closure works at runtime, but silently fails at compile time” (#9334)
- Fixed “Unhandled compiler exception [FieldDefect]: ‘sym’ is not accessible for type ‘TNode’ using ‘kind = nkClosure’” (#19095)
- Fixed “
newString
zeroes memory contrary to its documentation, significantly slowing it down” (#22555) - Fixed “Piece of code output c compiler error “ (#17197)
- Fixed “generic types parameter asserts the compiler” (#22600)
- Fixed “Missing type inference in loop + case + if + continue” (#22604)
- Fixed “Default value does not work with object’s discriminator” (#22613)
- Fixed “internal error: no generic body” (#1500)
- Fixed “Footnotes in documentation generation seem to be broken by default” (#21080)
- Fixed “Long-term arc-closure iterator problem” (#22619)
- Fixed “Regression in
{.borrow.}
for generic type with static size” (#22646) - Fixed “Invalid type mismatch in generic” (#17509)
- Fixed “type binding fails for type alias with extra generic parameter” (#21742)
- Fixed “Procs with constructor pragma doesn’t initialize object’s fields” (#22662)
- Fixed “=copy hook for seq appears to be broken” (#22664)
- Fixed “Using
merge
for a macro name causes it to silently get ignored” (#22676) - Fixed “Nim zero clear an object contains C++ imported class when a proc return it” (#22679)
- Fixed “constructor pragma doesnt init Nim default fields” (#22669)
- Fixed “Nim zero clear an object inherits C++ imported class when a proc return it” (#22680)
- Fixed “Size calculation thinks type is infinitely recursive with shared section and pragma” (#22713)
- Fixed “Defining a proc with constructor pragma cause compile error” (#22712)
- Fixed “ci/ directory missing from source archive” (#22692)
- Fixed “js backend - std/bitops/bitsliced throws compile error in typeMasked as of nim 2.0” (#22687)
- Fixed “Generated enum
case
code may trigger-Wmaybe-uninitialized
” (#22246) - Fixed “DocGen does not work for std/times on JS backend” (#22519)
- Fixed ““unknown hint” should not be an error - it should itself be a
hint
that can be enabled/disabled” (#22706) - Fixed “Docstring in invalid
var
block causes ICE” (#15351) - Fixed “Varargs conversions produce erroneous ConvFromXtoItselfNotNeeded warnings” (#10542)
- Fixed “VisualViewport in std/dom” (#21407)
- Fixed “
newSeqUninitialized
over-constrained,setLenUninitialized
missing” (#19727) - Fixed “Paths in
nim.cfg
are not relative to the file” (#22763) - Fixed “Compilation fails when using fusion’s ‘Some’ inside a generic proc” (#20435)
- Fixed “func
strutils.join
for non-strings uses proc$
which can have side effects” (#22696) - Fixed “
newSeqWith
unnecessarily/redundantly zero-initializes createdseq
” (#22554) - Fixed “Nimsuggest segfault with invalid assignment to table” (#22753)
- Fixed “
contentLength
implementation type mismatched” (#22778) - Fixed “Check atomicArc for atomic destroy race condition” (#22711)
- Fixed “Different results on orc/refc or global/procedure scope with orc” (#22787)
- Fixed “nimsuggest false error on lifetime tracking hook” (#22794)
- Fixed “[Renderer] SIGSEGV when trying to render invalid AST” (#8893)
- Fixed “
AnyEnumConv
warning when iterating overenum
” (#22790) - Fixed “Wrong codegen for default parameter values that calls
var Object
procedure with ARC/ORC on C++ backend.” (#22354) - Fixed “ORC AssertionDefect
not containsManagedMemory(n.typ)
” (#19250) - Fixed “followup #16820, test tsugar on all backends” (#16919)
- Fixed “Unnecessary warning on ‘options.none’ with ‘strictDefs’ enabled” (#22836)
- Fixed “std/nativesockets getHostByAddr should support IPv6” (#22834)
- Fixed “enumutils items[HoleyEnum] example code produces “unsafe” warnings” (#22844)
- Fixed “Invalid type checking for two instances of the same Generic type” (#22826)
- Fixed “Calling delete on an empty sequence results in invalid sequence” (#22856)
- Fixed “cstring modification example on Nim Manual cause SIGSEGV” (#22867)
- Fixed “std/nre leaks memory on every created
Regex
due to auto-translated finalizers behaving differently under ARC/ORC” (#22868) - Fixed “Cannot getContent with httpClient for specific website” (#22862)
- Fixed “
Table
,CountTable
, andHashSet
warn onUnsafeDefault
del
/excl
requiresInit
key type” (#22883) - Fixed “Destructor not called for temp objects passed as arguments” (#22866)
- Fixed ““Error: borrow from proc return type mismatch: ‘lent string’” when borrowing
[]
from Table” (#22902) - Fixed “
AnyEnumConv
warning when iterating overset
” (#22860) - Fixed “
reset
instances not be accessible forrequiresInit
types” (#22898) - Fixed “Cannot prove that result is initialized for a placeholder base method returning a lent” (#22673)
- Fixed “
std/options
don’t consider closure iterators to be pointer types” (#22932) - Fixed “[Regression] static integers in quote do” (#22947)
- Fixed “push-ing pragma exportc generates invalid C identifiers” (#22913)
- Fixed “Pushing
used
suppresses theXDeclaredButNotUsed
hint for some identifiers, but not others” (#22939) - Fixed “Nim compiler produces C code with incompatible type assignment” (#12464)
- Fixed “
inferGenericTypes
does not work with method call syntax” (#22971) - Fixed “system.=destroy does not accept non-var types” (#22286)
- Fixed “Defaulting a value to a type silently works in ref object” (#22996)
- Fixed “Different type inferred when setting a default value for an array field” (#22926)
- Fixed “newSeqUninit -> CT Error: opcCastIntToPtr” (#23006)
- Fixed “Problem removing cstring unsafe conversion warning” (#23001)
- Fixed “SIGSEGV when slicing
string
orseq[T]
with index out of range” (#22852) - Fixed “Unexpected seq copy under ORC” (#22552)
- Fixed “Regression from 2.0 to
devel
withraise an unlisted exception: Exception
” (#23019) - Fixed “Undeclared identifier in Unicode gives Unhelpful error message” (#23060)
- Fixed “nimsuggest inlay hints for types shown in the wrong place for exported vars and consts” (#23067)
- Fixed “macro is evaluated twice in generic context” (#9381)
- Fixed “nim doc doesn’t work when calling =destroy(x: var seq[T]) in =destroy(x: Foo)” (#23065)
- Fixed “
std/random
initRand() has a double identical entry in nim-lang.org/docs” (#23051) - Fixed “
--experimental:strictNotNil
causes an error” (#22637) - Fixed “Compiler doesn’t catch Not nil annotation error” (#18073)
- Fixed “Type mismatch error when importing strutils on platforms where ints are less then 32-bits wide” (#23125)
- Fixed “import sth from mymodule is compiles and trying to see module sthfrommymodule” (#23148)
- Fixed “Importing module with path concatenation inside templates not working anymore” (#23167)
- Fixed “Cannot get repr of range type of enum” (#23139)
- Fixed “ambiguous call with
$
when usingdistinct
” (#23172) - Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception
Exception
” (#23129) - Fixed “
Error: internal error: genMagicExpr: mDup
when usingarrayWith
with some types.” (#22923) - Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception
Exception
” (#23129) - Fixed “Tuple destructuring is broken with closure iterators” (#15924)
- Fixed “Compiler error (illegal read) on tuple unpacking in a
for
loop” (#23180) - Fixed “
system.insert
wipes the string ifitem
is an empty string” (#23223) - Fixed “const cstring incorrectly cgen’d (pointer is copied, pointing to garbage)” (#12334)
- Fixed “copy generated for non-copyable type” (#22218)
- Fixed “Regression when using generic type with Table/OrderedTable” (#23233)
- Fixed “[docgen] runnableExamples causes subsection to be rendered as a section” (#15176)
- Fixed “Converter and openArray together generate the wrong C code.” (#22597)
- Fixed “Parser does not correspond to grammar for
concept
” (#23085) - Fixed “1.6 to 2.0 regression with
UncheckedArray[string]
/toOpenArray
resulting inSIGSEGV
” (#23247) - Fixed “
tvatiteropenarray
test fails with c++” (#19977) - Fixed “Compiler segfaults when passing static parameter to non static macro parameter” (#22909)
- Fixed “nimsuggest
con
sometimes doesnt return anything on first pass” (#23281) - Fixed “method call syntax in
nkRecWhen
condition givesSIGSEGV
” (#14710) - Fixed “Operations on inline toOpenArray len return a wrong result” (#23280)
- Fixed “
==
doesn’t work correctly for Deque” (#23275) - Fixed “Wrong C code generated for newSeqWith when initializing two variables” (#18104)
- Fixed “nimsuggest
sug
doesnt return anything on first pass” (#23283) - Fixed “Refrain from using
sprintf()
, which triggers warnings in macOS 13/Xcode 14.1clang
” (#23304) - Fixed “Wrong behaviour when wrapping a constant object variant into a sequence at runtime” (#23295)
- Fixed “When NimScript errors prevents NimSuggest from Init” (#23337)
- Fixed “Error in proc that modifies instances of a recursive type defined with a concept” (#22723)
- Fixed “
nim cpp -r
invalid code generation regression with closure iterators and try/catch-like constructions” (#23306) - Fixed “{.union.} pragma is ignored on NimVM” (#13481)
- Fixed “sink parameters sometimes not copied even when there are later reads (refc)” (#23354)
- Fixed “Compiler error: “unhandled exception: field ‘sym’ is not accessible for type ‘TNode’ using ‘kind = nkEmpty’ [FieldDefect]”” (#23273)
- Fixed “Compiler doesn’t insert call to
=destroy
when compiled to staticLib” (#20945) - Fixed “Invalid C++ code generation when returning var T” (#10219)
- Fixed “
nim cpp
rejects valid codewould lose const qualifier
for cstring to string via cstrToNimstr” (#12703) - Fixed “ICE when trying to repr nnkMutableTy in macro” (#15751)
- Fixed “Lambdas expanded from template arguments crash the compiler” (#22846)
- Fixed “for JS,
abs BiggestInt -1
failed to run” (#23378) - Fixed “Regression from 1.6 to 2.0/devel with
nim c -c
SIGSEGV
withtemplate
/raises: []
” (#22284) - Fixed “
close(File)
andsetFilePos(File, int64, ...)
can be used infunc
” (#22166) - Fixed “when compile lambda iterator for JS, internal error: symbol has no generated name: true “ (#23382)
- Fixed “Future[object] aways copy data” (#23381)
- Fixed “NRVO can kick in on
exportc, dynlib
procedures” (#23401) - Fixed “Warning is ignored when using flags
--warningAsError
and--verbosity
together” (#23429) - Fixed “
set[uint8].len
returns a random number when passed to a proc as avar
” (#23422) - Fixed “Wrong code generation when using a proc with
virtual
pragma as parameter.” (#23434) - Fixed “Concept related crash only when compiling to JS” (#9550)
- Fixed “
swap
silently broken for objects inside functions (js target)” (#16771) - Fixed “Destructor not called for object subclass created in template and immediately passed as argument” (#23440)
- Fixed “Nested generic procs scoping in JS backend” (#4299)
- Fixed “JS
chckNilDisp
is wrong” (#23487) - Fixed “Regression when using the volatile module on devel” (#23499)
- Fixed “Wrong type in object construction error message” (#23494)
- Fixed “
Error: unhandled exception: injectdestructors.nim(425, 12) n.kind != nkSym or not hasDestructor(c, n.sym.typ)
with ARC or ORC during compilation” (#23505) - Fixed “Problem with closure iterators in js target” (#4695)
- Fixed “JS case using float range causes compiler crash” (#23492)
- Fixed “
<expr> is
crashes nimsuggest” (#23518) - Fixed “Top level variables are moved sometimes” (#23524)
- Fixed “
nim c -c
on{.push emit.}
:Error: unhandled exception: field 'sons' is not accessible for type 'TNode' using 'kind = nkIdent' [FieldDefect]
” (#23525) - Fixed “anonymous closure iterators doesn’t work with global variable in JS” (#23522)
- Fixed “Stack trace with wrong line number when the proc called inside for loop” (#23536)
- Fixed “
Error: fatal error: invalid kind for lastOrd(tyGenericParam)
in compiler given invalid array declaration” (#23531) - Fixed “
Error: internal error: openArrayLoc: ref array[0..0, int]
withnew array[1, int]
andtoOpenArray
” (#23321) - Fixed “
internal error: getTypeDescAux
withvoid
in generic array instantiation” (#23419) - Fixed “
typeinfo.extendSeq
generates random values” (#23556) - Fixed “
value out of range [RangeDefect]
in getFileInfo() for a specific file (file handle overflow?)” (#23442) - Fixed “Invalid styleCheck:hint for enum/func conflict” (#22409)
- Fixed “Invalid codegen when trying to mannualy delete distinct seq” (#23552)
- Fixed “Viewtype codegen error turns a single proc call into two” (#15778)
- Fixed “Error adding object with an openarray field to seq of base type” (#16671)
- Fixed “Simple destructor code gives invalid C” (#23627)
- Fixed “template return type ignored in type check, accepts invalid code” (#13426)
- Fixed “SIGSEGV when slicing
string
orseq[T]
with index out of range” (#22852) - Fixed “tasks.toTask Doesn’t Expect a Dot Expression” (#23635)
- Fixed “Add
hash()
forPath
” (#23663) - Fixed “Duplicate libraries linker warning (i.e., ‘-lm’) when importing std/math” (#22798)
- Fixed “Bad codegen when casting procs” (#5901)
- Fixed “Different memory usage behavior with Nim 2.0.0 vs 1.6.x” (#22510)
- Fixed “Destructor not called for
result
when exception is thrown” (#22672) - Fixed “sink parameters sometimes not copied even when there are later reads (refc)” (#23354)
- Fixed “Invalid generic type deduction with distinct, static “ (#23445)
- Fixed “On Linux, “nimsuggest” crashes if Nim is installed in /usr/bin and the library in /usr/lib/nim” (#23695)
- Fixed “memory leak with nested Exceptions” (#22398)
- Fixed “SIGSEGV with object variants and RTTI” (#23690)
- Fixed “parseInt accepts more than digits” (#23513)
- Fixed “ORC runs into infinite recursion” (#22927)
- Fixed “Views: GCC error when construct object with
openArray
from proc parameter” (#20048) - Fixed “Deadloop in Windows,
os.sleep(-1)
” (#23732) - Fixed “[Semi-regression] C code contains backtick`gensym” (#23711)
- Fixed “
setLen(0)
allocates memory causing performance regression” (#23742) - Fixed “Sigsegv on std/tasks destructor” (#23725)
- Fixed “
genericAssign
does not take care of theimportC
variables” (#9940) - Fixed “
move(table)
does not move the table” (#23759) - Fixed “Local variables can be prematurely moved to closure, causing use-after-move” (#23748)
- Fixed “waitForExit() with timeout hangs on already dead processes on Linux” (#5091)
- Fixed “Regression: compiler crash on static inference” (#23755)
- Fixed “Miscompilation of certain code” (#23775)
- Fixed “Regression: ICE genCheckedRecordField with unsafeAddr and macros” (#23784)
- Fixed “
Error: generic instantiation too nested
after using manycompiles(...)
” (#23790) - Fixed “Bad CPP codegen when using var array[] argument type in imported C functions.” (#23796)
- Fixed “Returning address of constant array emits invalid C code” (#22389)
- Fixed “Missing range check in
toOpenArray
” (#20865) - Fixed “VM crash when passing toOpenArray to var openArray func” (#22095)
- Fixed “illegal declarations should give error at declaration time, not later at instantiation time” (#3011)
- Fixed “Using waitForExit with timeout from multiple threads simultaneously hangs” (#23825)
- Fixed “cursor optimizer doesn’t understand that distinct cstring can be an owning type” (#23837)
- Fixed “Nim
devel
nightlyi386
build failing” (#23844) - Fixed “
koch pdf
produces a warning about unknown substitution ‘nimversion’” (#23846) - Fixed “
nim gendepend
does not work with var-less destructors” (#23848) - Fixed “2.2.0 rc1 regression with cdecl functions” (#23858)
- Fixed “ARC hooks missing when sinking generic typeclass” (#23869)
- Fixed “Cross compilation with mingw for cpu=i386 from linux/macos fails with time_t bug” (#23838)
- Fixed “nimsuggest crashes when using
--mm:arc/orc
and if an object that containsstring
orseq
is constructed” (#23867) - Fixed “
ptr UncheckedArray
toopenArray
conversion: resultingopenArray
can have wrong mutability” (#19171) - Fixed “succ raise OverflowDefect, succ does not handle unsigned integers correctly” (#23894)
- Fixed “VM: Can’t get address of object” (#13391)
- Fixed “
Error: 's' has unspecified generic parameters
with generics and template” (#21347) - Fixed “Unsigned integers are sometimes converted to signed when casting to a float” (#6549)
- Fixed “Compiler infers
sink
in return type fromauto
” (#23902) - Fixed “Double destroy using proc type alias with a sink” (#23907)
- Fixed “jsondoc broken in devel” (#23914)
- Fixed “Valid uint64 literal says -72057594037927936 can’t be converted to uint64.” (#14522)
- Fixed “
vmopsDanger
foros.getCurrentDir
errors because of importc check.” (#23932) - Fixed “passing string to
parseutils.parseFloat(openArray[char],...)
in compile-time leads to inner errorFieldDefect
” (#23936) - Fixed “-Warray-bounds when accessing seq with offset positive offset on cpp backend” (#23913)
- Fixed “Improper code generation for cross-compilation using arm-none-eabi-gcc” (#23817)
- Fixed “.uint8 compile-time error” (#23947)
- Fixed “uint8 > 8 bit at compile-time” (#23954)
- Fixed “
xu.p.data[i] = default(T)
doesnt produce any cgen code inimportcpp
types” (#23962) - Fixed “Memory corruption with
lent
and ORC” (#23973) - Fixed “Recent codegen bug passing pointer expressions to inline iterators” (#23982)
- Fixed “Invalid type in
nkWhenStmt
” (#23945) - Fixed “Put 0 in range[M..N] that would otherwise exclude it” (#23943)
- Fixed “IndexDefect thrown when destructuring a lent value” (#23454)
- Fixed “bindUnix loses the last character on OpenBSD” (#23956)
- Fixed “std/random produces different results on c/js[node] with int32” (#23915)
- Fixed “
offsetof(T, anFieldOfUncheckedArray)
returned the wrong value” (#22553) - Fixed “VM generates wrong cast for negative enum values” (#23925)
- Fixed “Top-level volatileLoad/volatileStore leads to invalid codegen” (#14623)
- Fixed “type-aliased
seq[T]
get different backend C/C++ pointer type names causing invalid codegen on gcc-14 | g++ | clang++” (#23923) - Fixed “Invalid C code generated for
lent array
intuple
” (#24034) - Fixed “js codegen bug for
case
statement with justelse
branch” (#24031) - Fixed “Yielding from var fails with pairs and destructuring” (#24033)
- Fixed “Useless empty C files with arc/orc” (#23897)
- Fixed “Pushing a hint off “disables” code reordering” (#24053)
- Fixed “closure types with default values don’t work in VM” (#21353)
- Fixed “GDB. tools/debug/nim-gdb.py bug” (#24109)
- Fixed “nim check crashes “ (#23624)
- Fixed “Calling algorithm reverse causes a SIGSEGV on ORC” (#24141)
- Fixed “in std/logging implement removeHandler” (#23757)
- Fixed “Copy hook causes an
incompatible-pointer-types
warning/error in GCC 14 with subclassed objects” (#24147) - Fixed “with
{.push deprecated.}
, getunhandled exception: ast.nim(1073, 3)
result == nil or result.kind == nkPragma[AssertionDefect]
” (#24167) - Fixed “dist/checksums wrong type: preventing build_all.sh” (#24173)
- Fixed “Sink parameters not copied at compile time” (#24175)
- Fixed “copyDir and copyDirWithPermissions do not handle FIFOs (named pipes)” (#24174)
- Fixed “Output executable is not updated after changing build mode” (#24008)