File: small-structs-pass-return-direct-in-c.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (138 lines) | stat: -rw-r--r-- 6,491 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend %s -typecheck -module-name Structs -clang-header-expose-decls=all-public -emit-clang-header-path %t/structs.h
// RUN: %FileCheck %s < %t/structs.h

// RUN: %check-interop-c-header-in-clang(%t/structs.h -Wno-unused-function)

// 32-bit disabled because of rdar://102147255
// REQUIRES: PTRSIZE=64

public struct StructOneI64 {
    let x: Int64
}

public struct StructU16AndPointer {
    let x: UInt8
    let y: UnsafeMutableRawPointer
}

public struct StructDoubleAndFloat {
    let x: Double
    let y: Float
}

// CHECK:      struct Structs_StructDoubleAndFloat {
// CHECK-NEXT:   _Alignas(8) char _storage[12];
// CHECK-NEXT: };

// CHECK:      struct Structs_StructOneI64 {
// CHECK-NEXT:   _Alignas(8) char _storage[8];
// CHECK-NEXT: };

// CHECK:      struct Structs_StructU16AndPointer {
// CHECK-NEXT:   _Alignas(8) char _storage[16];
// CHECK-NEXT: };

public func returnNewStructOneI64() -> StructOneI64 { return StructOneI64(x: 42 ) }

public func passThroughStructOneI64(_ x: StructOneI64) -> StructOneI64 { return x }

public func printStructOneI64(_ x: StructOneI64) {
    print("StructOneI64.x = \(x.x)")
}

public func returnNewStructU16AndPointer(_ x: UnsafeMutableRawPointer) -> StructU16AndPointer {
    return StructU16AndPointer(x: 55, y: x)
}

public func getStructU16AndPointer_x(_ x: StructU16AndPointer) -> UInt8 { return x.x }

public func getStructU16AndPointer_y(_ x: StructU16AndPointer) -> UnsafeMutableRawPointer { return x.y }

public func returnNewStructDoubleAndFloat(_ y: Float, _ x: Double) -> StructDoubleAndFloat {
    return StructDoubleAndFloat(x: x, y: y)
}

public func getStructDoubleAndFloat_x(_ x: StructDoubleAndFloat) -> Double { return x.x }

public func getStructDoubleAndFloat_y(_ x: StructDoubleAndFloat) -> Float { return x.y }

// CHECK:      struct swift_interop_passStub_Structs_double_0_8_float_8_12 {
// CHECK-NEXT:  double _1;
// CHECK-NEXT:  float _2;
// CHECK-NEXT: };

// CHECK:      static SWIFT_C_INLINE_THUNK struct swift_interop_passStub_Structs_double_0_8_float_8_12 swift_interop_passDirect_Structs_double_0_8_float_8_12(const char * _Nonnull value) {
// CHECK-NEXT:  struct swift_interop_passStub_Structs_double_0_8_float_8_12 result;
// CHECK-NEXT:  memcpy(&result._1, value + 0, 8);
// CHECK-NEXT:  memcpy(&result._2, value + 8, 4);
// CHECK-NEXT:  return result;
// CHECK-NEXT: }

// CHECK:      SWIFT_EXTERN double $s7Structs25getStructDoubleAndFloat_xySdAA0cdeF0VF(struct swift_interop_passStub_Structs_double_0_8_float_8_12 x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      SWIFT_EXTERN float $s7Structs25getStructDoubleAndFloat_yySfAA0cdeF0VF(struct swift_interop_passStub_Structs_double_0_8_float_8_12 x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      struct swift_interop_passStub_Structs_[[StructU16AndPointer:uint8_t_0_1_void_ptr_[0-9_]+]] {
// CHECK-NEXT:  uint8_t _1;
// CHECK-NEXT:  void * _Nullable _2;
// CHECK-NEXT: };

// CHECK:      static SWIFT_C_INLINE_THUNK struct swift_interop_passStub_Structs_[[StructU16AndPointer]] swift_interop_passDirect_Structs_[[StructU16AndPointer]](const char * _Nonnull value) {
// CHECK-NEXT:  struct swift_interop_passStub_Structs_[[StructU16AndPointer]] result;
// CHECK-NEXT:  memcpy(&result._1, value + 0, 1);
// CHECK-NEXT:  memcpy(&result._2, value + [[PTRSIZE:[48]]], [[PTRSIZE]]);
// CHECK-NEXT:  return result;
// CHECK-NEXT: }

// CHECK:      SWIFT_EXTERN uint8_t $s7Structs24getStructU16AndPointer_xys5UInt8VAA0cdeF0VF(struct swift_interop_passStub_Structs_[[StructU16AndPointer]] x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      SWIFT_EXTERN void * _Nonnull $s7Structs24getStructU16AndPointer_yySvAA0cdeF0VF(struct swift_interop_passStub_Structs_[[StructU16AndPointer]] x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      struct swift_interop_returnStub_Structs_uint64_t_0_8 {
// CHECK-NEXT:  uint64_t _1;
// CHECK-NEXT: };

// CHECK:      static SWIFT_C_INLINE_THUNK void swift_interop_returnDirect_Structs_uint64_t_0_8(char * _Nonnull result, struct swift_interop_returnStub_Structs_uint64_t_0_8 value) {
// CHECK-NEXT:  memcpy(result + 0, &value._1, 8);
// CHECK-NEXT: }

// CHECK:      struct swift_interop_passStub_Structs_uint64_t_0_8 {
// CHECK-NEXT:  uint64_t _1;
// CHECK-NEXT: };

// CHECK:      static SWIFT_C_INLINE_THUNK struct swift_interop_passStub_Structs_uint64_t_0_8 swift_interop_passDirect_Structs_uint64_t_0_8(const char * _Nonnull value) {
// CHECK-NEXT:  struct swift_interop_passStub_Structs_uint64_t_0_8 result;
// CHECK-NEXT:  memcpy(&result._1, value + 0, 8);
// CHECK-NEXT:  return result;
// CHECK-NEXT: }

// CHECK:      SWIFT_EXTERN struct swift_interop_returnStub_Structs_uint64_t_0_8 $s7Structs23passThroughStructOneI64yAA0deF0VADF(struct swift_interop_passStub_Structs_uint64_t_0_8 x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      SWIFT_EXTERN void $s7Structs17printStructOneI64yyAA0cdE0VF(struct swift_interop_passStub_Structs_uint64_t_0_8 x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK: struct swift_interop_returnStub_Structs_double_0_8_float_8_12 {
// CHECK-NEXT:   double _1;
// CHECK-NEXT:  float _2;
// CHECK-NEXT: };

// CHECK: static SWIFT_C_INLINE_THUNK void swift_interop_returnDirect_Structs_double_0_8_float_8_12(char * _Nonnull result, struct swift_interop_returnStub_Structs_double_0_8_float_8_12 value) {
// CHECK-NEXT:   memcpy(result + 0, &value._1, 8);
// CHECK-NEXT:   memcpy(result + 8, &value._2, 4);
// CHECK-NEXT: }

// CHECK:      SWIFT_EXTERN struct swift_interop_returnStub_Structs_double_0_8_float_8_12 $s7Structs29returnNewStructDoubleAndFloatyAA0defG0VSf_SdtF(float y, double x) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK:      SWIFT_EXTERN struct swift_interop_returnStub_Structs_uint64_t_0_8 $s7Structs21returnNewStructOneI64AA0deF0VyF(void) SWIFT_NOEXCEPT SWIFT_CALL;

// CHECK: struct swift_interop_returnStub_Structs_[[StructU16AndPointer]] {
// CHECK-NEXT:   uint8_t _1;
// CHECK-NEXT:   void * _Nullable _2;
// CHECK-NEXT: };

// CHECK:      static SWIFT_C_INLINE_THUNK void swift_interop_returnDirect_Structs_[[StructU16AndPointer]](char * _Nonnull result, struct swift_interop_returnStub_Structs_[[StructU16AndPointer]] value) {
// CHECK-NEXT:  memcpy(result + 0, &value._1, 1);
// CHECK-NEXT:  memcpy(result + [[PTRSIZE]], &value._2, [[PTRSIZE]]);
// CHECK-NEXT: }

// CHECK:      SWIFT_EXTERN struct swift_interop_returnStub_Structs_[[StructU16AndPointer]] $s7Structs28returnNewStructU16AndPointeryAA0defG0VSvF(void * _Nonnull x) SWIFT_NOEXCEPT SWIFT_CALL;