mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-02 21:49:02 +00:00
fixes #25908
When an enum identifier is resolved as an `nkSymChoice`, one of the
candidates may come from a loop-local view and carry `tyVar` or
`tyLent`.
Enum disambiguation should compare the underlying enum type only.
Otherwise a pure-enum field can win incorrectly even though the intended
symbol is already present in the choice set.
Keep the `includePureEnum` lookup path for enum-typed expectations so
#23976 still works, but normalize `var`/`lent` only at the symchoice
selection point.
(cherry picked from commit 6eef0cc2d5)
This commit is contained in:
@@ -283,3 +283,13 @@ block: # bug #23952
|
||||
doAssert s1 != s2
|
||||
static: foo()
|
||||
foo()
|
||||
|
||||
# bug #25908
|
||||
type S {.pure.} = enum a, b
|
||||
|
||||
iterator foo(x: array[1, S]): lent S =
|
||||
yield x[0]
|
||||
|
||||
iterator f(_: int | int): S =
|
||||
for a in foo([S.b]): yield a
|
||||
for v in f(0): doAssert v == S.b
|
||||
Reference in New Issue
Block a user