mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
don't try to infer array range to unresolved range (#24709)
fixes #24708
This commit is contained in:
@@ -1424,7 +1424,8 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
|
||||
return isNone
|
||||
|
||||
if fRange.rangeHasUnresolvedStatic:
|
||||
if aRange.kind in {tyGenericParam} and aRange.reduceToBase() == aRange:
|
||||
if (aRange.kind in {tyGenericParam} and aRange.reduceToBase() == aRange) or
|
||||
(aRange.kind == tyRange and aRange.rangeHasUnresolvedStatic):
|
||||
return
|
||||
return inferStaticsInRange(c, fRange, a)
|
||||
elif c.c.matchedConcept != nil and aRange.rangeHasUnresolvedStatic:
|
||||
|
||||
21
tests/overload/tgenericrangedisamb.nim
Normal file
21
tests/overload/tgenericrangedisamb.nim
Normal file
@@ -0,0 +1,21 @@
|
||||
# issue #24708
|
||||
|
||||
type Matrix[m, n: static int] = array[m * n, float]
|
||||
|
||||
func `[]`(A: Matrix, i, j: int): float =
|
||||
A[A.n * i + j]
|
||||
|
||||
func `[]`(A: var Matrix, i, j: int): var float =
|
||||
A[A.n * i + j]
|
||||
|
||||
func `*`[m, n, p: static int](A: Matrix[m, n], B: Matrix[n, p]): Matrix[m, p] =
|
||||
for i in 0 ..< m:
|
||||
for k in 0 ..< p:
|
||||
for j in 0 ..< n:
|
||||
result[i, k] += A[i, j] * B[j, k]
|
||||
|
||||
func square[n: static int](A: Matrix[n, n]): Matrix[n, n] =
|
||||
A * A
|
||||
|
||||
let A: Matrix[2, 2] = [-1, 1, 0, -1]
|
||||
doAssert square(A) == [1.0, -2.0, 0.0, 1.0]
|
||||
Reference in New Issue
Block a user