[Issue 24430] New: Nested Recursive SumType ICE and destructor issue
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Mar 6 02:46:11 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24430
Issue ID: 24430
Summary: Nested Recursive SumType ICE and destructor issue
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: kirsybuu at gmail.com
If I define this nested sumtype using `This` to be recursive:
```d
import std.sumtype;
struct X {
SumType!(int, SumType!(int,This)[]) value;
}
```
then the compiler gives this error:
```console
Error: unknown, please file report on issues.dlang.org
onlineapp.d(3): Error: template instance `std.sumtype.SumType!(int, This)`
error instantiating
```
Also, if instead I replace `This` with the wrapping struct:
```d
import std.sumtype;
struct X {
SumType!(int, SumType!(int,X)[]) value;
}
```
then this static assert fails within the match statement in sumtype's
destructor:
```console
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(2018): Error: static
assert: "No matching handler for types `(X)`"
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(1649):
instantiated from here: `matchImpl!(SumType!(int, X))`
/dlang/dmd/linux/bin64/../../src/phobos/std/sumtype.d(752): instantiated
from here: `match!(SumType!(int, X))`
onlineapp.d(3): instantiated from here: `SumType!(int, X)`
```
Small modifications that also error:
```d
SumType!(int, SumType!(int,This)*) value; // Error: unknown ...
SumType!(int, Tuple!(int,X)[]) value; // Error: unknown ...
```
Small modifications that don't error:
```d
SumType!(int, SumType!(int,X)*) value;
SumType!(int, SumType!(int,X*)[]) value;
SumType!(int, SumType!(int,This*)[]) value;
SumType!(int, Tuple!(int,This)[]) value;
SumType!(int, Tuple!(int,X)*) value;
SumType!(int, Tuple!(int,This)*) value;
SumType!(int,This[]) value;
SumType!(int,X[]) value;
```
Error output is from run.dlang.io and is similar on all settings of dmd/ldc and
versions since std.sumtype was released.
Possibly similar 2022 issue marked as FIXED:
https://issues.dlang.org/show_bug.cgi?id=22860
--
More information about the Digitalmars-d-bugs
mailing list