Thread overview
[Issue 16570] [REG 2.072.0-b1] Enum member with interpreted initializer has type of initializer not enum
Oct 02, 2016
Martin Nowak
Oct 05, 2016
Martin Nowak
October 02, 2016
https://issues.dlang.org/show_bug.cgi?id=16570

Martin Nowak <code@dawg.eu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |code@dawg.eu
            Summary|[REG 2.072.0-b1] implicit   |[REG 2.072.0-b1] Enum
                   |conversion from int to enum |member with interpreted
                   |fails when enum type is     |initializer has type of
                   |missing                     |initializer not enum

--- Comment #1 from Martin Nowak <code@dawg.eu> ---
cat > bug.d << CODE
static immutable int _a = 0;

enum Regression
{
    a = _a,
}

static assert(is(typeof(Regression.a) == Regression));
CODE
dmd -c bug
----
bug.d(8): Error: static assert  (is(int == Regression)) is false
----

Digger says that https://github.com/dlang/dmd/pull/5878 introduced the bug,
seems reasonable (see
https://github.com/dlang/dmd/pull/5878/files#diff-bbe16dab8171d70a98ca3272a1efcc4aR633).

--
October 05, 2016
https://issues.dlang.org/show_bug.cgi?id=16570

Martin Nowak <code@dawg.eu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull

--- Comment #2 from Martin Nowak <code@dawg.eu> ---
https://github.com/dlang/dmd/pull/6175

--
October 08, 2016
https://issues.dlang.org/show_bug.cgi?id=16570

--- Comment #3 from github-bugzilla@puremagic.com ---
Commits pushed to stable at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/620ecc2fa91dd88310a9205666fc0c826a778303 fix Issue 16570 - Enum member with interpreted...

...initializer has type of initializer not enum

- There is a very old (dmd 0.50 [¹]) mismatch of the CastExp's `to` type
  and the type painted on the CastExp (the latter being the basetype of
  the former, i.e. EnumType vs. int) in the result of
  `Expression.castTo(ed.type)`.
  Because of that difference interpreting castTo might unexpectedly use
  the basetype instead of the enum type for the enum initializer, and
  thus triggers the can't convert int to EnumType error.

- The trigger was introduced with the addition of a `e.ctfeInterpret` in
  denum.d (see 932be192e3).

- Comments on CastExp suggest that this type mismatch is actually
  intended, I don't see any reason for it though.

- Alternatively we could somehow fix ctfeInterpret to preserve CastExp's
  painted type.

[¹]: https://github.com/dlang/dmd/blob/bde09435d149c699490bb888b832228e0d31c221/src/cast.c#L321-L323respect

https://github.com/dlang/dmd/commit/fa464f3742f5b92324a20597489c475118a293cc Merge pull request #6175 from MartinNowak/fix16570

fix Issue 16570 - Enum member with interpreted...

--
October 09, 2016
https://issues.dlang.org/show_bug.cgi?id=16570

--- Comment #4 from github-bugzilla@puremagic.com ---
Commits pushed to master at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/620ecc2fa91dd88310a9205666fc0c826a778303 fix Issue 16570 - Enum member with interpreted...

https://github.com/dlang/dmd/commit/fa464f3742f5b92324a20597489c475118a293cc Merge pull request #6175 from MartinNowak/fix16570

--
November 04, 2016
https://issues.dlang.org/show_bug.cgi?id=16570

--- Comment #5 from github-bugzilla@puremagic.com ---
Commits pushed to newCTFE at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/620ecc2fa91dd88310a9205666fc0c826a778303 fix Issue 16570 - Enum member with interpreted...

https://github.com/dlang/dmd/commit/fa464f3742f5b92324a20597489c475118a293cc Merge pull request #6175 from MartinNowak/fix16570

--
December 06, 2017
https://issues.dlang.org/show_bug.cgi?id=16570

--- Comment #6 from github-bugzilla@puremagic.com ---
Commit pushed to master at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/6f3b7e6b306818c65327cd698da1e401685ca025 Modify test for issue 16570 to accomodate fix for issue 12385

--
December 18, 2017
https://issues.dlang.org/show_bug.cgi?id=16570

--- Comment #7 from github-bugzilla@puremagic.com ---
Commit pushed to stable at https://github.com/dlang/dmd

https://github.com/dlang/dmd/commit/6f3b7e6b306818c65327cd698da1e401685ca025 Modify test for issue 16570 to accomodate fix for issue 12385

--