summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sighashes.nim6
-rw-r--r--tests/types/t7905.nim18
2 files changed, 22 insertions, 2 deletions
diff --git a/compiler/sighashes.nim b/compiler/sighashes.nim
index 0b95387cd..720d1848d 100644
--- a/compiler/sighashes.nim
+++ b/compiler/sighashes.nim
@@ -189,10 +189,11 @@ proc hashType(c: var MD5Context, t: PType; flags: set[ConsiderFlag]) =
         c.hashTypeSym(t.sym)
       else:
         c.hashSym(t.sym)
-      if sfAnon in t.sym.flags:
+      if {sfAnon, sfGenSym} * t.sym.flags != {}:
         # generated object names can be identical, so we need to
         # disambiguate furthermore by hashing the field types and names:
         # mild hack to prevent endless recursions (makes nimforum compile again):
+        let wasAnon = sfAnon in t.sym.flags
         excl t.sym.flags, sfAnon
         let n = t.n
         for i in 0 ..< n.len:
@@ -200,7 +201,8 @@ proc hashType(c: var MD5Context, t: PType; flags: set[ConsiderFlag]) =
           let s = n[i].sym
           c.hashSym s
           c.hashType s.typ, flags
-        incl t.sym.flags, sfAnon
+        if wasAnon:
+          incl t.sym.flags, sfAnon
     else:
       c &= t.id
     if t.len > 0 and t.sons[0] != nil:
diff --git a/tests/types/t7905.nim b/tests/types/t7905.nim
new file mode 100644
index 000000000..ddb371039
--- /dev/null
+++ b/tests/types/t7905.nim
@@ -0,0 +1,18 @@
+discard """
+  output: '''
+(member: "hello world")
+(member: 123.456)
+'''
+"""
+
+template foobar(arg: typed): untyped =
+  type
+    MyType = object
+      member: type(arg)
+
+  var myVar: MyType
+  myVar.member = arg
+  echo myVar
+
+foobar("hello world")
+foobar(123.456'f64)