diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 38d040946f..750ab2216b 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -227,8 +227,8 @@ proc isRecursiveType(t: PType, cycleDetector: var IntSet): bool = proc fitDefaultNode(c: PContext, n: PNode): PType = let expectedType = if n[^2].kind != nkEmpty: semTypeNode(c, n[^2], nil) else: nil - let oldType = n[^1].typ n[^1] = semConstExpr(c, n[^1], expectedType = expectedType) + let oldType = n[^1].typ n[^1].flags.incl nfSem if n[^2].kind != nkEmpty: if expectedType != nil and oldType != expectedType: diff --git a/tests/objects/tobject_default_value.nim b/tests/objects/tobject_default_value.nim index 59af943e0c..97e3a207d7 100644 --- a/tests/objects/tobject_default_value.nim +++ b/tests/objects/tobject_default_value.nim @@ -591,6 +591,29 @@ template main {.dirty.} = mainSync() + block: # bug #21801 + func evaluate(i: int): float = + 0.0 + + func evaluate(): float = + 0.0 + + type SearchOptions = object + evaluation: proc(): float = evaluate + + block: + func evaluate(): float = + 0.0 + + type SearchOptions = object + evaluation: proc(): float = evaluate + + block: + func evaluate(i: int): float = + 0.0 + + type SearchOptions = object + evaluation = evaluate static: main() main()