diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-04-13 18:11:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-13 12:11:06 +0200 |
commit | 16f42084d32144d5afb2a5cc3a5a833e5295a8bc (patch) | |
tree | cee13e611922cc1f232423718ec1af314b79e698 | |
parent | 3f51b6f73ddc476c645f1e3e0205d2f203eaf8e2 (diff) | |
download | Nim-16f42084d32144d5afb2a5cc3a5a833e5295a8bc.tar.gz |
fixes #20900; Calling template through from generic function across module fails to build (#21649)
* fixes #20900; Calling template through from generic function across module fails to build * sanother way
-rw-r--r-- | compiler/semobjconstr.nim | 1 | ||||
-rw-r--r-- | tests/generics/m3770.nim | 9 | ||||
-rw-r--r-- | tests/generics/t3770.nim | 4 |
3 files changed, 12 insertions, 2 deletions
diff --git a/compiler/semobjconstr.nim b/compiler/semobjconstr.nim index 2d95da50d..28471f016 100644 --- a/compiler/semobjconstr.nim +++ b/compiler/semobjconstr.nim @@ -86,6 +86,7 @@ proc semConstrField(c: PContext, flags: TExprFlags, var initValue = semExprFlagDispatched(c, assignment[1], flags, field.typ) if initValue != nil: initValue = fitNodeConsiderViewType(c, field.typ, initValue, assignment.info) + initValue.flags.incl nfSkipFieldChecking assignment[0] = newSymNode(field) assignment[1] = initValue assignment.flags.incl nfSem diff --git a/tests/generics/m3770.nim b/tests/generics/m3770.nim index 2c6a2bd11..7f5714a2b 100644 --- a/tests/generics/m3770.nim +++ b/tests/generics/m3770.nim @@ -1,6 +1,11 @@ type Noice* = object hidden: int - + template jjj*: Noice = - Noice(hidden: 15) \ No newline at end of file + Noice(hidden: 15) + +type Opt* = object + o: int + +template none*(O: type Opt): Opt = Opt(o: 0) diff --git a/tests/generics/t3770.nim b/tests/generics/t3770.nim index fa9c97df8..ffccbeeb5 100644 --- a/tests/generics/t3770.nim +++ b/tests/generics/t3770.nim @@ -7,3 +7,7 @@ proc someGeneric(_: type) = doAssert $jjj() == "(hidden: 15)" # fails: "Error: the field 'hidden' is not accessible." someGeneric(int) + +# bug #20900 +proc c(y: int | int, w: Opt = Opt.none) = discard +c(0) |