Merge pull request #8084 from LemonBoy/fix-7905

Discriminate gensym'd type names in sigHash
This commit is contained in:
Andreas Rumpf 2018-06-24 09:54:00 +02:00 • committed by GitHub
commit 105a472dc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 3 deletions

View file

@ -189,18 +189,19 @@ 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):
excl t.sym.flags, sfAnon
let oldFlags = t.sym.flags
t.sym.flags = t.sym.flags - {sfAnon, sfGenSym}
let n = t.n
for i in 0 ..< n.len:
assert n[i].kind == nkSym
let s = n[i].sym
c.hashSym s
c.hashType s.typ, flags
incl t.sym.flags, sfAnon
t.sym.flags = oldFlags
else:
c &= t.id
if t.len > 0 and t.sons[0] != nil: