dmd 2.099 regression: unittest -checkaction=context and import std.regex cause lots of undefined references

kdevel kdevel at vogtner.de
Thu Mar 17 14:00:45 UTC 2022


zstack.d:
```
module zstack;
import std.stdio: writeln;

void bar (int [] i)
{
    writeln ("i: ", i);
}

unittest {
    int [] arr;
    bar (arr);
}
```

zrepo.d:
```
module parser;
import std.regex;
import zstack;
```

```
    $ dmd -g -i -unittest -checkaction=context -main -run zrepro 
2>&1 | ddemangle
```

gives

```
zrepro.o: In function `pure nothrow @nogc @safe immutable(char)[] 
core.internal.dassert._d_assert_fail!(int)._d_assert_fail(scope 
const(immutable(char)[]), const(int))':
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:41: undefined reference to `pure nothrow @nogc @safe bool core.internal.dassert.inFinalizer!().inFinalizer()'
zrepro.o: In function `pure nothrow @nogc @safe uint 
std.uni.sliceBits!(0uL, 
8uL).sliceBits.opCall!(dchar).opCall(dchar)':
[...]/dmd2/linux/bin64/../../src/phobos/std/uni/package.d:5593: 
undefined reference to `pure nothrow @nogc @safe 
immutable(char)[] 
core.internal.dassert._d_assert_fail!(const(uint))._d_assert_fail!(int)._d_assert_fail(scope const(immutable(char)[]), ref const(uint), const(int))'
zrepro.o: In function `pure nothrow @nogc @safe immutable(char)[] 
core.internal.dassert._d_assert_fail!(bool)._d_assert_fail(scope 
const(immutable(char)[]), ref const(bool))':
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:41: undefined reference to `pure nothrow @nogc @safe bool core.internal.dassert.inFinalizer!().inFinalizer()'
zrepro.o: In function `pure nothrow @nogc @safe uint 
std.uni.sliceBits!(13uL, 
21uL).sliceBits.opCall!(dchar).opCall(dchar)':
[...]/dmd2/linux/bin64/../../src/phobos/std/uni/package.d:5593: 
undefined reference to `pure nothrow @nogc @safe 
immutable(char)[] 
core.internal.dassert._d_assert_fail!(const(uint))._d_assert_fail!(int)._d_assert_fail(scope const(immutable(char)[]), ref const(uint), const(int))'
zrepro.o: In function `pure nothrow @nogc @safe uint 
std.uni.sliceBits!(8uL, 
13uL).sliceBits.opCall!(dchar).opCall(dchar)':
[...]/dmd2/linux/bin64/../../src/phobos/std/uni/package.d:5593: 
undefined reference to `pure nothrow @nogc @safe 
immutable(char)[] 
core.internal.dassert._d_assert_fail!(const(uint))._d_assert_fail!(int)._d_assert_fail(scope const(immutable(char)[]), ref const(uint), const(int))'
zrepro.o: In function `pure nothrow @nogc @safe immutable(char)[] 
core.internal.dassert._d_assert_fail!(ulong)._d_assert_fail!(ulong)._d_assert_fail(scope const(immutable(char)[]), ref const(ulong), const(ulong))':
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:70: undefined reference to `pure nothrow @nogc @safe bool core.internal.dassert.inFinalizer!().inFinalizer()'
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:75: undefined reference to `pure nothrow @nogc @safe immutable(char)[] core.internal.dassert.miniFormatFakeAttributes!(ulong).miniFormatFakeAttributes(ref const(ulong))'
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:77: undefined reference to `pure nothrow @nogc @safe immutable(char)[] core.internal.dassert.miniFormatFakeAttributes!(ulong).miniFormatFakeAttributes(ref const(ulong))'
zrepro.o: In function `pure nothrow @nogc @safe immutable(char)[] 
core.internal.dassert._d_assert_fail!(ulong)._d_assert_fail!(int)._d_assert_fail(scope const(immutable(char)[]), ref const(ulong), const(int))':
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:70: undefined reference to `pure nothrow @nogc @safe bool core.internal.dassert.inFinalizer!().inFinalizer()'
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:75: undefined reference to `pure nothrow @nogc @safe immutable(char)[] core.internal.dassert.miniFormatFakeAttributes!(ulong).miniFormatFakeAttributes(ref const(ulong))'
zrepro.o: In function `pure nothrow @nogc @safe immutable(char)[] 
core.internal.dassert._d_assert_fail!(ulong)._d_assert_fail!(ulong)._d_assert_fail(scope const(immutable(char)[]), ref const(ulong), ref const(ulong))':
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:70: undefined reference to `pure nothrow @nogc @safe bool core.internal.dassert.inFinalizer!().inFinalizer()'
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:75: undefined reference to `pure nothrow @nogc @safe immutable(char)[] core.internal.dassert.miniFormatFakeAttributes!(ulong).miniFormatFakeAttributes(ref const(ulong))'
[...]/dmd2/linux/bin64/../../src/druntime/import/core/internal/dassert.d:77: undefined reference to `pure nothrow @nogc @safe immutable(char)[] core.internal.dassert.miniFormatFakeAttributes!(ulong).miniFormatFakeAttributes(ref const(ulong))'
collect2: ld returned 1 exit status
Error: linker exited with status 1
```

If ```import std.regex;``` is commented out or if 
```-checkaction=context``` is removed from the cmd line the 
unittest passes. Can anybody reproduce this?


More information about the Digitalmars-d-learn mailing list