   // CHECK: required init(wrappedRequiredInSub: WrappedInt?)
   // CHECK-RECOVERY: /* placeholder for init(wrappedRequiredInSub:) */
   public required override init(wrappedRequiredInSub: WrappedInt?) { super.init() }
+
+  // CHECK: required init(wrappedRequiredDynamic: WrappedInt)
+  // CHECK-RECOVERY: /* placeholder for init(wrappedRequiredDynamic:) */
+  public required init(wrappedRequiredDynamic: WrappedInt) { super.init() }
 }
 // CHECK: {{^}$}}
 // CHECK-RECOVERY: {{^}$}}


// CHECK-IR-LABEL: define{{.*}} void @_T08typedefs18testVTableBuildingy3Lib4UserC4user_tF
public func testVTableBuilding(user: User) {
  // The important thing in this CHECK line is the "i64 29", which is the offset
  // for the vtable slot for 'lastMethod()'. If the layout here
  // changes, please check that offset 29 is still correct.
  // CHECK-IR-NOT: ret
  // CHECK-IR: getelementptr inbounds void (%T3Lib4UserC*)*, void (%T3Lib4UserC*)** %{{[0-9]+}}, {{i64 29|i32 32}}
  _ = user.lastMethod()
} // CHECK-IR: ret void


  // CHECK: {{^}} init(wrappedRequiredInSub: WrappedInt)
  // CHECK-RECOVERY: /* placeholder for init(wrappedRequiredInSub:) */
  public init(wrappedRequiredInSub: WrappedInt) {}

  // CHECK: dynamic init(wrappedDynamic: WrappedInt)
  // CHECK-RECOVERY: /* placeholder for init(wrappedDynamic:) */
  @objc public dynamic init(wrappedDynamic: WrappedInt) {}

  // CHECK: dynamic required init(wrappedRequiredDynamic: WrappedInt)
  // CHECK-RECOVERY: /* placeholder for init(wrappedRequiredDynamic:) */
  @objc public dynamic required init(wrappedRequiredDynamic: WrappedInt) {}

  public func lastMethod() {}
}
