Thread overview
using dub and -checkaction=context
Jan 17, 2021
Anonymouse
Jan 18, 2021
Mathias LANG
January 17, 2021
I'm trying to run unittests using `dub test`, and I wanted to use the new -checkaction=context feature to avoid having to instrument my unittests to print out the string comparison failure that's happening.

But I tried adding this to my dub.sdl file:

dflags "-checkaction=context" platform="dmd"

But now I get linker errors:

/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/appmain.d:(.text._D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'
/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/.dub/build/epoll-$DFLAGS-linux.posix-x86_64-dmd_2093-6D60905058E56B7C24E84CCDF9B29FD3/libvibe_core.a(sync_1456_5e95.o): In function `_D4vibe4core4sync__T22RecursiveTaskMutexImplVbi0ZQBd6unlockMFNeZ9__lambda1MFNbNfZv':
/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/core/sync.d:(.text._D4vibe4core4sync__T22RecursiveTaskMutexImplVbi0ZQBd6unlockMFNeZ9__lambda1MFNbNfZv[_D4vibe4core4sync__T22RecursiveTaskMutexImplVbi0ZQBd6unlockMFNeZ9__lambda1MFNbNfZv]+0xb7): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'
/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/.dub/build/epoll-$DFLAGS-linux.posix-x86_64-dmd_2093-6D60905058E56B7C24E84CCDF9B29FD3/libvibe_core.a(sync_145a_5e95.o): In function `_D4vibe4core4sync__T22RecursiveTaskMutexImplVbi1ZQBd6unlockMFNeZ9__lambda1MFNbNfZv':
/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/core/sync.d:(.text._D4vibe4core4sync__T22RecursiveTaskMutexImplVbi1ZQBd6unlockMFNeZ9__lambda1MFNbNfZv[_D4vibe4core4sync__T22RecursiveTaskMutexImplVbi1ZQBd6unlockMFNeZ9__lambda1MFNbNfZv]+0xb7): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'
/home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/.dub/build/epoll-$DFLAGS-linux.posix-x86_64-dmd_2093-6D60905058E56B7C24E84CCDF9B29FD3/libvibe_core.a(typecons_91_11ed.o): In function `_D3std8typecons__T10RefCountedTSQBe9container10binaryheap__T10BinaryHeapTSQCuQBq5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCgS_DQCeQCcQCaQBy3ascFNfKQCzKQDdZbZQEt4DataVEQHjQHi24RefCountedAutoInitializei0ZQIc6__dtorMFNaNbNiZv':
/home/steves/.dvm/compilers/dmd-2.093.1/linux/bin/../../src/phobos/std/typecons.d:(.text._D3std8typecons__T10RefCountedTSQBe9container10binaryheap__T10BinaryHeapTSQCuQBq5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCgS_DQCeQCcQCaQBy3ascFNfKQCzKQDdZbZQEt4DataVEQHjQHi24RefCountedAutoInitializei0ZQIc6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container10binaryheap__T10BinaryHeapTSQCuQBq5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCgS_DQCeQCcQCaQBy3ascFNfKQCzKQDdZbZQEt4DataVEQHjQHi24RefCountedAutoInitializei0ZQIc6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'

How am I supposed to do this? I tried setting DFLAGS and LDFLAGS and still linker errors. What am I doing wrong?

-Steve
January 17, 2021
On Sunday, 17 January 2021 at 15:41:45 UTC, Steven Schveighoffer wrote:
> I'm trying to run unittests using `dub test`, and I wanted to use the new -checkaction=context feature to avoid having to instrument my unittests to print out the string comparison failure that's happening.
>
> But I tried adding this to my dub.sdl file:
>
> dflags "-checkaction=context" platform="dmd"
>
> But now I get linker errors:
>
> /home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/appmain.d:(.text._D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'

https://issues.dlang.org/show_bug.cgi?id=19937 ? Slightly different error message though.
January 17, 2021
On 1/17/21 2:27 PM, Anonymouse wrote:
> On Sunday, 17 January 2021 at 15:41:45 UTC, Steven Schveighoffer wrote:
>> I'm trying to run unittests using `dub test`, and I wanted to use the new -checkaction=context feature to avoid having to instrument my unittests to print out the string comparison failure that's happening.
>>
>> But I tried adding this to my dub.sdl file:
>>
>> dflags "-checkaction=context" platform="dmd"
>>
>> But now I get linker errors:
>>
>> /home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/appmain.d:(.text._D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf' 
>>
> 
> https://issues.dlang.org/show_bug.cgi?id=19937 ? Slightly different error message though.

Yeah, that's probably it. Hm... this feature isn't very usable if I can't use it with dub. And the bug report you linked to also has an example that fails with straight dmd (even without unittests).

-Steve
January 18, 2021
On Sunday, 17 January 2021 at 20:42:06 UTC, Steven Schveighoffer wrote:
> On 1/17/21 2:27 PM, Anonymouse wrote:
>> On Sunday, 17 January 2021 at 15:41:45 UTC, Steven Schveighoffer wrote:
>>> I'm trying to run unittests using `dub test`, and I wanted to use the new -checkaction=context feature to avoid having to instrument my unittests to print out the string comparison failure that's happening.
>>>
>>> But I tried adding this to my dub.sdl file:
>>>
>>> dflags "-checkaction=context" platform="dmd"
>>>
>>> But now I get linker errors:
>>>
>>> /home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/appmain.d:(.text._D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf'
>>>
>> 
>> https://issues.dlang.org/show_bug.cgi?id=19937 ? Slightly different error message though.
>
> Yeah, that's probably it. Hm... this feature isn't very usable if I can't use it with dub. And the bug report you linked to also has an example that fails with straight dmd (even without unittests).
>
> -Steve

Yeah, it's currently not usable, because DMD thinks the template is already instantiated in Phobos / druntime. I tried to work around it in my projects and it didn't work out.
I want to enable it by default but there's 2 issues blocking it ATM (see https://github.com/dlang/dmd/pull/11925). Once that PR is green, we can enable it when compiling druntime / Phobos and your linker errors will disappear.

Also, dub-wise, you can't really use `-preview` before the latest release. That's why we added https://github.com/dlang/dub/commit/cd9b30e04813108c05abf97d97a42daf466eabdb ...
January 18, 2021
On 1/18/21 7:48 AM, Mathias LANG wrote:
> On Sunday, 17 January 2021 at 20:42:06 UTC, Steven Schveighoffer wrote:
>> On 1/17/21 2:27 PM, Anonymouse wrote:
>>> On Sunday, 17 January 2021 at 15:41:45 UTC, Steven Schveighoffer wrote:
>>>> I'm trying to run unittests using `dub test`, and I wanted to use the new -checkaction=context feature to avoid having to instrument my unittests to print out the string comparison failure that's happening.
>>>>
>>>> But I tried adding this to my dub.sdl file:
>>>>
>>>> dflags "-checkaction=context" platform="dmd"
>>>>
>>>> But now I get linker errors:
>>>>
>>>> /home/steves/.dub/packages/vibe-core-1.10.1/vibe-core/source/vibe/appmain.d:(.text._D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv[_D3std8typecons__T10RefCountedTSQBe9container5array__T5ArrayTS4vibe4core4sync18LocalTaskSemaphore12ThreadWaiterZQCg7PayloadVEQEtQEs24RefCountedAutoInitializei0ZQFm6__dtorMFNaNbNiZv]+0x5c): undefined reference to `_D4core8internal7dassert__T14_d_assert_failVAyaa1_3eTmTiZQBeFNaNbNiNfKxmxiZQBf' 
>>>>
>>>>
>>>
>>> https://issues.dlang.org/show_bug.cgi?id=19937 ? Slightly different error message though.
>>
>> Yeah, that's probably it. Hm... this feature isn't very usable if I can't use it with dub. And the bug report you linked to also has an example that fails with straight dmd (even without unittests).
>>
> 
> Yeah, it's currently not usable, because DMD thinks the template is already instantiated in Phobos / druntime. I tried to work around it in my projects and it didn't work out.

OK, good to know. I didn't spend too much time on it.

> I want to enable it by default but there's 2 issues blocking it ATM (see https://github.com/dlang/dmd/pull/11925). Once that PR is green, we can enable it when compiling druntime / Phobos and your linker errors will disappear.
Looking forward to that!

> 
> Also, dub-wise, you can't really use `-preview` before the latest release. That's why we added https://github.com/dlang/dub/commit/cd9b30e04813108c05abf97d97a42daf466eabdb ...

Yeah, this isn't exactly a preview switch, but the dub feature is definitely necessary.

Another thought -- can the frontend specially treat these assert templates with -allinst even when that switch isn't present? Would that solve the problem?

-Steve