     if forceAddressOnly {
       let ty = TupleType(elements: eltTypes, category: .address)
       let lowering = AddressOnlyLowering(ty)
+      self.loweringCache[CacheKey(loweredType: ty)] = lowering
       self.loweringCache[CacheKey(payloadOf: name)] = lowering
       return (lowering, ty)
     } else if hasOnlyTrivialElements {
       let ty = TupleType(elements: eltTypes, category: .object)
       let lowering = TrivialLowering(ty)
+      self.loweringCache[CacheKey(loweredType: ty)] = lowering
       self.loweringCache[CacheKey(payloadOf: name)] = lowering
       return (lowering, ty)
     } else {
       let ty = TupleType(elements: eltTypes, category: .object)
       let lowering = NonTrivialLowering(ty)
+      self.loweringCache[CacheKey(loweredType: ty)] = lowering
       self.loweringCache[CacheKey(payloadOf: name)] = lowering
       return (lowering, ty)
     }


    init(payloadOf name: String) {
      self.details = .constructorPayload(name)
    }

    static func == (lhs: CacheKey, rhs: CacheKey) -> Bool {

    let info = self.lower(type)
    self.loweringCache[key] = info
    self.loweringCache[resolvedKey] = info
    self.loweringCache[CacheKey(loweredType: info.type)] = info
    return info
  }

