Bug 20324 – Calling __traits(getUnitTests) on a template causes compiler segfault

Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2019-10-26T12:38:23Z
Last change time
2020-11-16T00:10:05Z
Keywords
ice, pull
Assigned to
No Owner
Creator
carlin.stpierre

Comments

Comment #0 by carlin.stpierre — 2019-10-26T12:38:23Z
Compiler segfaults because of the following code: ``` module segfault; template Foo() { unittest {} } void bar() { foreach(member; __traits(derivedMembers, segfault)) { alias a = __traits(getUnitTests, __traits(getMember, segfault, member)); } } ``` Compiler output: ``` $ dmd -v -c -unittest segfault.d predefs DigitalMars Posix linux ELFv1 CRuntime_Glibc CppRuntime_Gcc LittleEndian D_Version2 all D_SIMD D_InlineAsm_X86_64 X86_64 D_LP64 D_PIC unittest assert D_ModuleInfo D_Exceptions D_TypeInfo D_HardFloat binary dmd version v2.088.0 config /etc/dmd.conf DFLAGS -I/usr/include/dmd/phobos -I/usr/include/dmd/druntime/import -L-L/usr/lib/x86_64-linux-gnu -L--export-dynamic -fPIC parse segfault importall segfault import object (/usr/include/dmd/druntime/import/object.d) import core.internal.array.appending (/usr/include/dmd/druntime/import/core/internal/array/appending.d) import core.internal.array.comparison (/usr/include/dmd/druntime/import/core/internal/array/comparison.d) import core.internal.array.equality (/usr/include/dmd/druntime/import/core/internal/array/equality.d) import core.internal.array.casting (/usr/include/dmd/druntime/import/core/internal/array/casting.d) import core.internal.array.concatenation (/usr/include/dmd/druntime/import/core/internal/array/concatenation.d) import core.internal.array.construction (/usr/include/dmd/druntime/import/core/internal/array/construction.d) import core.internal.array.capacity (/usr/include/dmd/druntime/import/core/internal/array/capacity.d) import core.internal.hash (/usr/include/dmd/druntime/import/core/internal/hash.d) import core.internal.traits (/usr/include/dmd/druntime/import/core/internal/traits.d) import core.internal.convert (/usr/include/dmd/druntime/import/core/internal/convert.d) semantic segfault semantic2 segfault semantic3 segfault Segmentation fault (core dumped) ```
Comment #1 by b2.temp — 2019-11-03T22:05:39Z
looks fixed in 2.089.0, but a reduced case shows it's definitevely not: --- module still; template Foo() { unittest {} } void bar() { __traits(getUnitTests, Foo); } --- 2.089 emits an error when trying to get the test for bar, while the segfault is for the template.
Comment #2 by dlang-bot — 2019-11-03T22:18:37Z
@clYd3r created dlang/dmd pull request #10533 "fix issue 20324 - Calling __traits(getUnitTests) on a template causes compiler segfault" fixing this issue: - fix issue 20324 - Calling __traits(getUnitTests) on a template causes compiler segfault https://github.com/dlang/dmd/pull/10533
Comment #3 by destructionator — 2020-10-19T13:24:13Z
Possible same thing: import std.stdio; mixin template Test() { unittest { writeln("test 1"); } } mixin Test t; unittest { writeln("test 2"); } void main() { pragma(msg, __traits(getUnitTests, Test)); // segfault }
Comment #4 by dlang-bot — 2020-10-20T00:15:12Z
@BorisCarvajal created dlang/dmd pull request #11889 "Fix Issue 20324 - Calling __traits(getUnitTests) on a template causes…" fixing this issue: - Fix Issue 20324 - Calling __traits(getUnitTests) on a template causes compiler segfault https://github.com/dlang/dmd/pull/11889
Comment #5 by dlang-bot — 2020-10-20T01:24:35Z
dlang/dmd pull request #11889 "Fix Issue 20324 - Calling __traits(getUnitTests) on a template causes…" was merged into stable: - b75a3486f4a4fc953c13972f36923b2eccd0d4e9 by Boris Carvajal: Fix Issue 20324 - Calling __traits(getUnitTests) on a template causes compiler segfault https://github.com/dlang/dmd/pull/11889
Comment #6 by dlang-bot — 2020-11-16T00:10:05Z
dlang/dmd pull request #11961 "merge stable" was merged into master: - c765bb67b54ab7f590a4a595a85a9b3cd95ba76c by Boris Carvajal: Fix Issue 20324 - Calling __traits(getUnitTests) on a template causes compiler segfault https://github.com/dlang/dmd/pull/11961