www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 22902] New: dmd 2.099 regression: unittest

https://issues.dlang.org/show_bug.cgi?id=22902

          Issue ID: 22902
           Summary: dmd 2.099 regression: unittest -checkaction=context
                    and import std.regex causes link error
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: kdevel vogtner.de



Taken from forum post [1]

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.

[1] https://forum.dlang.org/thread/aabnjercvkywppgntttc forum.dlang.org

--
Mar 18 2022