Files
swift-mirror/test/RemoteAST/member_offsets.swift
John McCall a8e9ad3d0d Gate the swift-remoteast-test tests on the target matching the host.
swift-remoteast-test uses the JIT to execute code in its own process.
Even if we theoretically taught the interpreter to perform some sort
of remote interpretation, that would not be sufficient to make
swift-remoteast-test work.  Therefore I've introduced a new lit
feature check specifically for swift-remoteast-test, but set it by
default to be equivalent to swift_interpreter.
2016-11-08 11:38:23 -08:00

142 lines
3.0 KiB
Swift

// RUN: %target-swift-remoteast-test %s | %FileCheck %s
// REQUIRES: swift-remoteast-test
// REQUIRES: PTRSIZE=64
@_silgen_name("printTypeMemberOffset")
func printTypeMemberOffset(_: Any.Type, _: StaticString)
@_silgen_name("printTypeMetadataMemberOffset")
func printTypeMetadataMemberOffset(_: Any.Type, _: StaticString)
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "0")
// CHECK: found offset: 0
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "1")
// CHECK-NEXT: found offset: 8
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "2")
// CHECK-NEXT: found offset: 12
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "3")
// CHECK-NEXT: found offset: 16
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "4")
// CHECK-NEXT: found offset: 18
printTypeMemberOffset((Int,Bool,Float,Bool,Int16).self, "5")
// CHECK-NEXT: type has no member named '5'
struct A {
var a: Int
var b: Bool
var c: Float
var d: Bool
var e: Int16
}
printTypeMemberOffset(A.self, "a")
// CHECK-NEXT: found offset: 0
printTypeMemberOffset(A.self, "b")
// CHECK-NEXT: found offset: 8
printTypeMemberOffset(A.self, "c")
// CHECK-NEXT: found offset: 12
printTypeMemberOffset(A.self, "d")
// CHECK-NEXT: found offset: 16
printTypeMemberOffset(A.self, "e")
// CHECK-NEXT: found offset: 18
printTypeMemberOffset(A.self, "f")
// CHECK-NEXT: type has no member named 'f'
struct B<T> {
var a: Int
var b: Bool
var c: T
var d: Bool
var e: Int16
}
printTypeMemberOffset(B<Float>.self, "a")
// CHECK-NEXT: found offset: 0
printTypeMemberOffset(B<Float>.self, "b")
// CHECK-NEXT: found offset: 8
printTypeMemberOffset(B<Float>.self, "c")
// CHECK-NEXT: found offset: 12
printTypeMemberOffset(B<Float>.self, "d")
// CHECK-NEXT: found offset: 16
printTypeMemberOffset(B<Float>.self, "e")
// CHECK-NEXT: found offset: 18
printTypeMemberOffset(B<Float>.self, "f")
// CHECK-NEXT: type has no member named 'f'
class C {
var a: Int
var b: Bool
var c: Float
var d: Bool
var e: Int16
init() {
a = 0; b = false; c = 0; d = false; e = 0
}
}
printTypeMemberOffset(C.self, "a")
// CHECK-NEXT: found offset: 16
printTypeMemberOffset(C.self, "b")
// CHECK-NEXT: found offset: 24
printTypeMemberOffset(C.self, "c")
// CHECK-NEXT: found offset: 28
printTypeMemberOffset(C.self, "d")
// CHECK-NEXT: found offset: 32
printTypeMemberOffset(C.self, "e")
// CHECK-NEXT: found offset: 34
printTypeMemberOffset(C.self, "f")
// CHECK-NEXT: type has no member named 'f'
class D<T> {
var a: Int
var b: Bool
var c: T
var d: Bool
var e: Int16
init(v: T) {
a = 0; b = false; c = v; d = false; e = 0
}
}
printTypeMemberOffset(D<Float>.self, "a")
// CHECK-NEXT: found offset: 16
printTypeMemberOffset(D<Float>.self, "b")
// CHECK-NEXT: found offset: 24
printTypeMemberOffset(D<Float>.self, "c")
// CHECK-NEXT: found offset: 28
printTypeMemberOffset(D<Float>.self, "d")
// CHECK-NEXT: found offset: 32
printTypeMemberOffset(D<Float>.self, "e")
// CHECK-NEXT: found offset: 34
printTypeMemberOffset(D<Float>.self, "f")
// CHECK-NEXT: type has no member named 'f'