discard """
  joinable: false
"""

# bug #20141
type
  A = object
  B = object
  U = proc()

proc m(h: var B) = discard

template n[T, U](x: U): T =
  static: doAssert true
  cast[ptr T](addr x)[]

proc k() =
  var res: A
  m(n[B](res))

proc w(mounter: U) = discard

proc mount(proto: U) = discard
proc v() = mount k

# This is required for failure
w(v)