Bug 21231 – Unreachable warning for empty struct in VariantN with preview=fieldwise
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2020-09-08T18:41:25Z
Last change time
2020-10-21T04:52:58Z
Keywords
pull
Assigned to
No Owner
Creator
moonlightsentinel
Comments
Comment #0 by moonlightsentinel — 2020-09-08T18:41:25Z
The following code produces an "unreachable code" warning when compiled with -preview=fieldwise:
================================================
struct Empty
{
bool opCmp(const scope ref Empty) const
{ return false; }
}
void main()
{
import std.variant : VariantN;
Empty a, b;
assert(a == b);
assert(!(a < b));
VariantN!(4, Empty) v = a;
assert(v == b);
assert(!(v < b));
}
================================================
/dlang/dmd/linux/bin64/../../src/phobos/std/variant.d(261): Warning: statement is not reachable
================================================
The unreachable code follows an equality check for Empty which always returns true, causing an early exit in VariantN.handler.compare. This skips the checks for < and >.
Comment #1 by dlang-bot — 2020-09-08T19:01:06Z
@MoonlightSentinel created dlang/phobos pull request #7622 "Enable preview=fieldwise & fix blocking bug in VariantN" fixing this issue:
- Fix 21231 - Unreachable warning for empty struct in VariantN...
... with preview=fieldwise.
Equality checks will never fail for instances of empty structs, hence
don't generate code checking `<` and `>` for them.
This was exposed by `-preview=fieldwise` which (as a side effect)
enables dmd to const-fold the aformentioned equality test in the
frontend.
https://github.com/dlang/phobos/pull/7622
Comment #2 by dlang-bot — 2020-09-10T15:03:31Z
@nordlow created dlang/phobos pull request #7624 "Fieldwise revived" fixing this issue:
- Fix 21231 - Unreachable warning for empty struct in VariantN...
... with preview=fieldwise.
Equality checks will never fail for instances of empty structs, hence
don't generate code checking `<` and `>` for them.
This was exposed by `-preview=fieldwise` which (as a side effect)
enables dmd to const-fold the aformentioned equality test in the
frontend.
https://github.com/dlang/phobos/pull/7624
Comment #3 by dlang-bot — 2020-10-21T04:52:58Z
dlang/phobos pull request #7624 "Make Phobos compilable with preview=fieldwise" was merged into master:
- c7e49f5afd20e874e2e046d6402b40e5698a282e by MoonlightSentinel:
Fix 21231 - Unreachable warning for empty struct in VariantN...
... with preview=fieldwise.
Equality checks will never fail for instances of empty structs, hence
don't generate code checking `<` and `>` for them.
This was exposed by `-preview=fieldwise` which (as a side effect)
enables dmd to const-fold the aformentioned equality test in the
frontend.
https://github.com/dlang/phobos/pull/7624