diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index 9b52610f60..2d8981704e 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -2001,6 +2001,9 @@ proc genTypeInfoV1(m: BModule; t: PType; info: TLineInfo): Rope = of tyRef: genTypeInfoAux(m, t, t, result, info) if m.config.selectedGC in {gcMarkAndSweep, gcRefc, gcGo}: + # it may not be used in other places except in `genTraverseProc`, + # we have to generate a typedesc for this case, not a weak one + discard getTypeDesc(m, origType.last) let markerProc = genTraverseProc(m, origType, sig) m.s[cfsTypeInit3].addFieldAssignment(tiNameForHcr(m, result), "marker", markerProc) of tyPtr, tyRange, tyUncheckedArray: genTypeInfoAux(m, t, t, result, info) diff --git a/tests/refc/m24844.nim b/tests/refc/m24844.nim new file mode 100644 index 0000000000..59e709d24d --- /dev/null +++ b/tests/refc/m24844.nim @@ -0,0 +1,8 @@ +type + S*[T] = ref object of RootObj + k: string + A*[T] = ref object of S[T] + +proc p*[T](): S[T] = S[T]() +proc u*() = discard A[int]() +discard A[int]() \ No newline at end of file diff --git a/tests/refc/t24844.nim b/tests/refc/t24844.nim new file mode 100644 index 0000000000..1a60e94125 --- /dev/null +++ b/tests/refc/t24844.nim @@ -0,0 +1,11 @@ +discard """ + matrix: "--mm:refc; --mm:arc" + joinable: false +""" + +import m24844 + +u() + +type E = distinct int +discard p[E]() \ No newline at end of file