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