summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sigmatch.nim8
-rw-r--r--tests/metatype/tshacontext.nim44
2 files changed, 49 insertions, 3 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index a581e20f9..077b4b269 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -1823,9 +1823,11 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
         if not exprStructuralEquivalent(aOrig.n, reevaluated.typ.n):
           result = isNone
     else:
-      localError(c.c.graph.config, f.n.info, "type expected")
-      result = isNone
-
+      # bug #14136: other types are just like 'tyStatic' here:
+      result = typeRel(c, a, reevaluated.typ)
+      if result != isNone and reevaluated.typ.n != nil:
+        if not exprStructuralEquivalent(aOrig.n, reevaluated.typ.n):
+          result = isNone
   of tyNone:
     if a.kind == tyNone: result = isEqual
   else:
diff --git a/tests/metatype/tshacontext.nim b/tests/metatype/tshacontext.nim
new file mode 100644
index 000000000..7f649d202
--- /dev/null
+++ b/tests/metatype/tshacontext.nim
@@ -0,0 +1,44 @@
+
+# bug #14136
+
+type
+  MDigest*[bits: static[int]] = object
+    ## Message digest type
+    data*: array[bits div 8, byte]
+
+  Sha2Context*[bits: static[int],
+               bsize: static[int],
+               T: uint32|uint64] = object
+    count: array[2, T]
+    state: array[8, T]
+    buffer: array[bsize, byte]
+
+  sha256* = Sha2Context[256, 64, uint32]
+
+template hmacSizeBlock*(h: typedesc): int =
+  when (h is Sha2Context):
+    int(h.bsize)
+  else:
+    {.fatal: "Choosen hash primitive is not yet supported!".}
+
+type
+  HMAC*[HashType] = object
+    ## HMAC context object.
+    mdctx: HashType
+    opadctx: HashType
+    ipad: array[HashType.hmacSizeBlock, byte]
+    opad: array[HashType.hmacSizeBlock, byte]
+
+func hkdfExtract*[T;S,I: char|byte](ctx: var HMAC[T],
+                     prk: var MDigest[T.bits], # <------- error here "Error: type expected"
+                     salt: openArray[S],
+                     ikm: openArray[I]
+                    ) =
+  discard
+
+var ctx: HMAC[sha256]
+var prk: MDigest[sha256.bits]
+let salt = [byte 0x00, 0x01, 0x02]
+let ikm = "CompletelyRandomInput"
+
+ctx.hkdfExtract(prk, salt, ikm)