diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2019-02-10 22:07:51 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-02-10 22:07:50 +0100 |
commit | 5fd9bf9cd52a19b0ddd59452d9ebde0715d7d890 (patch) | |
tree | 90458afdcb7e0895f348929bb9ce97f606a0018d /compiler | |
parent | 491060839473fbe5fa17b4fd37b93f5dcc662db8 (diff) | |
download | Nim-5fd9bf9cd52a19b0ddd59452d9ebde0715d7d890.tar.gz |
Propagate tfGcSafe flag to generic instantiations (#10620)
Fixes a nasty endless loop in the generic instantiation phase.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/semtypinst.nim | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim index ebe822cdf..ceabd8e60 100644 --- a/compiler/semtypinst.nim +++ b/compiler/semtypinst.nim @@ -300,7 +300,6 @@ proc instCopyType*(cl: var TReplTypeVars, t: PType): PType = proc handleGenericInvocation(cl: var TReplTypeVars, t: PType): PType = # tyGenericInvocation[A, tyGenericInvocation[A, B]] # is difficult to handle: - const eqFlags = eqTypeFlags + {tfGcSafe} var body = t.sons[0] if body.kind != tyGenericBody: internalError(cl.c.config, cl.info, "no generic body") @@ -311,7 +310,7 @@ proc handleGenericInvocation(cl: var TReplTypeVars, t: PType): PType = else: result = searchInstTypes(t) - if result != nil and eqFlags*result.flags == eqFlags*t.flags: + if result != nil and sameFlags(result, t): when defined(reportCacheHits): echo "Generic instantiation cached ", typeToString(result), " for ", typeToString(t) return @@ -329,7 +328,7 @@ proc handleGenericInvocation(cl: var TReplTypeVars, t: PType): PType = if header != t: # search again after first pass: result = searchInstTypes(header) - if result != nil and eqFlags*result.flags == eqFlags*t.flags: + if result != nil and sameFlags(result, t): when defined(reportCacheHits): echo "Generic instantiation cached ", typeToString(result), " for ", typeToString(t), " header ", typeToString(header) |