summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-04-13 18:11:06 +0800
committerGitHub <noreply@github.com>2023-04-13 12:11:06 +0200
commit16f42084d32144d5afb2a5cc3a5a833e5295a8bc (patch)
treecee13e611922cc1f232423718ec1af314b79e698
parent3f51b6f73ddc476c645f1e3e0205d2f203eaf8e2 (diff)
downloadNim-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.nim1
-rw-r--r--tests/generics/m3770.nim9
-rw-r--r--tests/generics/t3770.nim4
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)