diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index c87b7662233c6..677afc2d50593 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1149,9 +1149,10 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, f.n[i] = tryResolvingStaticExpr(c, f.n[i]) result = typeRangeRel(f, a) else: - if skipTypes(f, {tyRange}).kind == a.kind: + let f = skipTypes(f, {tyRange}) + if f.kind == a.kind and (f.kind != tyEnum or sameEnumTypes(f, a)): result = isIntConv - elif isConvertibleToRange(skipTypes(f, {tyRange}), a): + elif isConvertibleToRange(f, a): result = isConvertible # a convertible to f of tyInt: result = handleRange(f, a, tyInt8, tyInt32) of tyInt8: result = handleRange(f, a, tyInt8, tyInt8) diff --git a/tests/range/tenums.nim b/tests/range/tenums.nim new file mode 100644 index 0000000000000..3cdf06fe291ef --- /dev/null +++ b/tests/range/tenums.nim @@ -0,0 +1,33 @@ +discard """ + cmd: "nim check --hints:off $file" + errormsg: "type mismatch: got " + nimout: ''' +tenums.nim(32, 20) Error: type mismatch: got +but expected one of: +proc takesChristmasColor(color: ChristmasColors) + first type mismatch at position: 1 + required type for color: ChristmasColors + but expression 'A' is of type: Letters + +expression: takesChristmasColor(A) +tenums.nim(33, 20) Error: type mismatch: got +but expected one of: +proc takesChristmasColor(color: ChristmasColors) + first type mismatch at position: 1 + required type for color: ChristmasColors + but expression 'BC(C)' is of type: BC + +expression: takesChristmasColor(BC(C)) +''' +""" + +type + Colors = enum Red, Green, Blue + ChristmasColors = range[Red .. Green] + Letters = enum A, B, C + BC = range[B .. C] + +proc takesChristmasColor(color: ChristmasColors) = discard +takesChristmasColor(Green) +takesChristmasColor(A) +takesChristmasColor(BC(C))