@@ -111,24 +111,27 @@ public func makeUvw(_ x: Int) -> Uvw {
111
111
// CHECK: class PrimitivePayload final {
112
112
// CHECK: inline int64_t getX() const {
113
113
// CHECK-NEXT: if (!isX()) abort();
114
- // CHECK-NEXT: auto thisCopy = *this;
115
- // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy._destructiveProjectEnumData();
114
+ // CHECK-NEXT: alignas(PrimitivePayload) unsigned char buffer[sizeof(PrimitivePayload)];
115
+ // CHECK-NEXT: auto *thisCopy = new(buffer) PrimitivePayload(*this);
116
+ // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy->_destructiveProjectEnumData();
116
117
// CHECK-NEXT: int64_t result;
117
118
// CHECK-NEXT: memcpy(&result, payloadFromDestruction, sizeof(result));
118
119
// CHECK-NEXT: return result;
119
120
// CHECK-NEXT: }
120
121
// CHECK: inline double getY() const {
121
122
// CHECK-NEXT: if (!isY()) abort();
122
- // CHECK-NEXT: auto thisCopy = *this;
123
- // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy._destructiveProjectEnumData();
123
+ // CHECK-NEXT: alignas(PrimitivePayload) unsigned char buffer[sizeof(PrimitivePayload)];
124
+ // CHECK-NEXT: auto *thisCopy = new(buffer) PrimitivePayload(*this);
125
+ // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy->_destructiveProjectEnumData();
124
126
// CHECK-NEXT: double result;
125
127
// CHECK-NEXT: memcpy(&result, payloadFromDestruction, sizeof(result));
126
128
// CHECK-NEXT: return result;
127
129
// CHECK-NEXT: }
128
130
// CHECK: inline bool getZ() const {
129
131
// CHECK-NEXT: if (!isZ()) abort();
130
- // CHECK-NEXT: auto thisCopy = *this;
131
- // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy._destructiveProjectEnumData();
132
+ // CHECK-NEXT: alignas(PrimitivePayload) unsigned char buffer[sizeof(PrimitivePayload)];
133
+ // CHECK-NEXT: auto *thisCopy = new(buffer) PrimitivePayload(*this);
134
+ // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy->_destructiveProjectEnumData();
132
135
// CHECK-NEXT: bool result;
133
136
// CHECK-NEXT: memcpy(&result, payloadFromDestruction, sizeof(result));
134
137
// CHECK-NEXT: return result;
@@ -173,16 +176,18 @@ public func makeUvw(_ x: Int) -> Uvw {
173
176
// CHECK: class Xyz final {
174
177
// CHECK: inline Foo getFirst() const {
175
178
// CHECK-NEXT: if (!isFirst()) abort();
176
- // CHECK-NEXT: auto thisCopy = *this;
177
- // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy._destructiveProjectEnumData();
179
+ // CHECK-NEXT: alignas(Xyz) unsigned char buffer[sizeof(Xyz)];
180
+ // CHECK-NEXT: auto *thisCopy = new(buffer) Xyz(*this);
181
+ // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy->_destructiveProjectEnumData();
178
182
// CHECK-NEXT: return _impl::_impl_Foo::returnNewValue([&](char * _Nonnull result) {
179
183
// CHECK-NEXT: _impl::_impl_Foo::initializeWithTake(result, payloadFromDestruction);
180
184
// CHECK-NEXT: });
181
185
// CHECK-NEXT: }
182
186
// CHECK: inline Bar getThird() const {
183
187
// CHECK-NEXT: if (!isThird()) abort();
184
- // CHECK-NEXT: auto thisCopy = *this;
185
- // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy._destructiveProjectEnumData();
188
+ // CHECK-NEXT: alignas(Xyz) unsigned char buffer[sizeof(Xyz)];
189
+ // CHECK-NEXT: auto *thisCopy = new(buffer) Xyz(*this);
190
+ // CHECK-NEXT: char * _Nonnull payloadFromDestruction = thisCopy->_destructiveProjectEnumData();
186
191
// CHECK-NEXT: return _impl::_impl_Bar::returnNewValue([&](char * _Nonnull result) {
187
192
// CHECK-NEXT: _impl::_impl_Bar::initializeWithTake(result, payloadFromDestruction);
188
193
// CHECK-NEXT: });
0 commit comments