summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2021-09-03 15:18:55 +0200
committerGitHub <noreply@github.com>2021-09-03 15:18:55 +0200
commit06ff0e96249884f4ac6c49dadc96147be1c31097 (patch)
tree9f1ec5c915d212bd26787ca376dcf6090ba18c6e
parent0635697a89b3aef2a188a0bddb46965bae7ee70f (diff)
downloadNim-06ff0e96249884f4ac6c49dadc96147be1c31097.tar.gz
fixes #18769 (#18790)
-rw-r--r--compiler/semgnrc.nim8
-rw-r--r--tests/enum/toverloadable_enums.nim11
2 files changed, 17 insertions, 2 deletions
diff --git a/compiler/semgnrc.nim b/compiler/semgnrc.nim
index 3df1e0c3f..e249d88e8 100644
--- a/compiler/semgnrc.nim
+++ b/compiler/semgnrc.nim
@@ -107,6 +107,12 @@ proc semGenericStmtSymbol(c: PContext, n: PNode, s: PSym,
     else:
       result = n
     onUse(n.info, s)
+  of skEnumField:
+    if overloadableEnums in c.features:
+      result = symChoice(c, n, s, scOpen)
+    else:
+      result = newSymNode(s, n.info)
+      onUse(n.info, s)
   else:
     result = newSymNode(s, n.info)
     onUse(n.info, s)
@@ -407,7 +413,7 @@ proc semGenericStmt(c: PContext, n: PNode,
         a[^1] = semGenericStmt(c, a[^1], flags, ctx)
         for j in 0..<a.len-2:
           addTempDecl(c, getIdentNode(c, a[j]), varKind)
-      else: 
+      else:
         illFormedAst(a, c.config)
   of nkGenericParams:
     for i in 0..<n.len:
diff --git a/tests/enum/toverloadable_enums.nim b/tests/enum/toverloadable_enums.nim
index 2152d7fff..df255dd71 100644
--- a/tests/enum/toverloadable_enums.nim
+++ b/tests/enum/toverloadable_enums.nim
@@ -1,6 +1,7 @@
 discard """
   output: '''B
-0'''
+0
+E2-B'''
 joinable: false
 """
 
@@ -75,3 +76,11 @@ block: # https://github.com/nim-lang/RFCs/issues/8
   doAssert x == 0
   doAssert hA3 == 1
   doAssert hA4 == 1
+
+# bug #18769
+proc g3[T](x: T, e: E2): int =
+  case e
+  of value1: echo "E2-A"        # Error: type mismatch: got 'E1' for 'value1' but expected 'E2 = enum'
+  of value2: echo "E2-B"
+
+let v5 = g3(99, E2.value2)