digitalmars.D.bugs - [Issue 19520] New: TypeExp is TypeExp: cannot interpret at compile
- d-bugmail puremagic.com (42/42) Dec 27 2018 https://issues.dlang.org/show_bug.cgi?id=19520
https://issues.dlang.org/show_bug.cgi?id=19520 Issue ID: 19520 Summary: TypeExp is TypeExp: cannot interpret at compile time / is not an expression Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: blocker Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: ibuclaw gdcproject.org https://github.com/dlang/dmd/pull/8945 introduced a funny little test. --- struct Foo { alias MyInt = int; } assert(attribs[0] is Foo); // TypeExp is TypeExp. --- This errors in gdc's codegen, because we build the back-end expression before checking the type, but it succeeds with dmd because it checks the type and doesn't evaluate the expression as it's empty. We can easily break dmd though... --- struct Empty { } struct WithSym { int i; } void test() { // error: cannot interpret Empty at compile time static assert(Empty is Empty); // error: cannot interpret WithSym at compile time static assert(WithSym is WithSym); // This compiles !!! assert(Empty is Empty); // error: type WithSym is not an expression assert(WithSym is WithSym); } --- It's quite clear that either all should succeed, or the third test should fail. I don't think its outside the scope of CTFE to evaluate `assert(type is type)` as either true or false, so that should be addressed. --
Dec 27 2018