diff --git a/changelog.md b/changelog.md index c1dc6e27d7f3..d8f3ccb928b1 100644 --- a/changelog.md +++ b/changelog.md @@ -110,6 +110,8 @@ becomes an alias for `addr`. In the command line, this is defined as `-d:a.b.c`. Older versions can use accents as in ``defined(`a.b.c`)`` to access such defines. +- Defines the `gcRefc` symbol which allows writing specific code for the refc GC. + ## Compiler changes - `nim` can now compile version 1.4.0 as follows: `nim c --lib:lib --stylecheck:off compiler/nim`, diff --git a/compiler/commands.nim b/compiler/commands.nim index b849f503d35e..a71dae9d96da 100644 --- a/compiler/commands.nim +++ b/compiler/commands.nim @@ -542,6 +542,7 @@ proc processMemoryManagementOption(switch, arg: string, pass: TCmdLinePass, incl conf.globalOptions, optTlsEmulation # Boehm GC doesn't scan the real TLS of "refc": unregisterArcOrc(conf) + defineSymbol(conf.symbols, "gcrefc") conf.selectedGC = gcRefc of "markandsweep": unregisterArcOrc(conf) diff --git a/tests/stdlib/tstrutils2.nim b/tests/stdlib/tstrutils2.nim index 881817f90434..a8bf08eedfb1 100644 --- a/tests/stdlib/tstrutils2.nim +++ b/tests/stdlib/tstrutils2.nim @@ -1,10 +1,15 @@ +discard """ + matrix: "--gc:refc; --gc:orc" +""" + import "$lib/.." / compiler/strutils2 block: # setLen var a = "abc" a.setLen 0 a.setLen 3, isInit = false - doAssert a[1] == 'b' + when defined(gcRefc): # bug #19763 + doAssert a[1] == 'b' a.setLen 0 a.setLen 3, isInit = true doAssert a[1] == '\0'