diff --git a/include/swift/ABI/Metadata.h b/include/swift/ABI/Metadata.h index 7016f8a849ab8..a619f70d81af8 100644 --- a/include/swift/ABI/Metadata.h +++ b/include/swift/ABI/Metadata.h @@ -1495,7 +1495,11 @@ struct TargetTupleTypeMetadata : public TargetMetadata { ConstTargetMetadataPointer Type; /// The offset of the tuple element within the tuple. +#if __APPLE__ StoredSize Offset; +#else + uint32_t Offset; +#endif OpaqueValue *findIn(OpaqueValue *tuple) const { return (OpaqueValue*) (((char*) tuple) + Offset); @@ -1506,6 +1510,9 @@ struct TargetTupleTypeMetadata : public TargetMetadata { } }; + static_assert(sizeof(Element) == sizeof(StoredSize) * 2, + "element size should be two words"); + Element *getElements() { return reinterpret_cast(this + 1); } diff --git a/lib/IRGen/IRGenModule.cpp b/lib/IRGen/IRGenModule.cpp index 1cfb741f44928..fae7bd56c34e9 100644 --- a/lib/IRGen/IRGenModule.cpp +++ b/lib/IRGen/IRGenModule.cpp @@ -266,7 +266,7 @@ IRGenModule::IRGenModule(IRGenerator &irgen, // A tuple type metadata record has a couple extra fields. auto tupleElementTy = createStructType(*this, "swift.tuple_element_type", { TypeMetadataPtrTy, // Metadata *Type; - SizeTy // size_t Offset; + Int32Ty // int32_t Offset; }); TupleTypeMetadataPtrTy = createStructPointerType(*this, "swift.tuple_type", { TypeMetadataStructTy, // (base) diff --git a/test/IRGen/generic_tuples.swift b/test/IRGen/generic_tuples.swift index ed6dca3e1f0ac..f1a7b00b7c184 100644 --- a/test/IRGen/generic_tuples.swift +++ b/test/IRGen/generic_tuples.swift @@ -9,7 +9,7 @@ // CHECK: [[TYPE:%swift.type]] = type { // CHECK: [[OPAQUE:%swift.opaque]] = type opaque // CHECK: [[TUPLE_TYPE:%swift.tuple_type]] = type { [[TYPE]], i64, i8*, [0 x %swift.tuple_element_type] } -// CHECK: %swift.tuple_element_type = type { [[TYPE]]*, i64 } +// CHECK: %swift.tuple_element_type = type { [[TYPE]]*, i32 } func dup(_ x: T) -> (T, T) { var x = x; return (x,x) } // CHECK: define hidden swiftcc void @"$s14generic_tuples3dupyx_xtxlF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type* %T)