Skip to content

Commit 6491dd5

Browse files
authored
Merge pull request #64307 from hyp/eng/noexcept-value-types-cxx
[interop][SwiftToCxx] annotate several value type members as 'noexcept'
2 parents aae9483 + 6f4feeb commit 6491dd5

10 files changed

+57
-52
lines changed

lib/PrintAsClang/PrintClangValueType.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ void ClangValueTypePrinter::printValueTypeDecl(
282282
printer.printInlineForThunk();
283283
os << '~';
284284
printer.printBaseName(typeDecl);
285-
os << "() {\n";
285+
os << "() noexcept {\n";
286286
ClangValueTypePrinter::printValueWitnessTableAccessAsVariable(
287287
os, typeMetadataFuncName, typeMetadataFuncGenericParams);
288288
os << " vwTable->destroy(_getOpaquePointer(), metadata._0);\n";
@@ -293,7 +293,7 @@ void ClangValueTypePrinter::printValueTypeDecl(
293293
printer.printBaseName(typeDecl);
294294
os << "(const ";
295295
printer.printBaseName(typeDecl);
296-
os << " &other) {\n";
296+
os << " &other) noexcept {\n";
297297
ClangValueTypePrinter::printValueWitnessTableAccessAsVariable(
298298
os, typeMetadataFuncName, typeMetadataFuncGenericParams);
299299
if (isOpaqueLayout) {
@@ -312,7 +312,7 @@ void ClangValueTypePrinter::printValueTypeDecl(
312312
printer.printBaseName(typeDecl);
313313
os << "(";
314314
printer.printBaseName(typeDecl);
315-
os << " &&) { abort(); }\n";
315+
os << " &&) noexcept { abort(); }\n";
316316

317317
bodyPrinter();
318318
if (typeDecl->isStdlibDecl())
@@ -324,21 +324,21 @@ void ClangValueTypePrinter::printValueTypeDecl(
324324
os << " ";
325325
printer.printInlineForThunk();
326326
printer.printBaseName(typeDecl);
327-
// FIXME: make noexcept.
328327
if (isOpaqueLayout) {
329328
os << "(";
330329
printer.printSwiftImplQualifier();
331-
os << "ValueWitnessTable * _Nonnull vwTable) : _storage(vwTable->size, "
330+
os << "ValueWitnessTable * _Nonnull vwTable) noexcept : "
331+
"_storage(vwTable->size, "
332332
"vwTable->getAlignment()) {}\n";
333333
} else {
334-
os << "() {}\n";
334+
os << "() noexcept {}\n";
335335
}
336336
// Print out '_make' function which returns an unitialized instance for
337337
// passing to Swift.
338338
os << " static ";
339339
printer.printInlineForThunk();
340340
printer.printBaseName(typeDecl);
341-
os << " _make() {";
341+
os << " _make() noexcept {";
342342
if (isOpaqueLayout) {
343343
os << "\n";
344344
ClangValueTypePrinter::printValueWitnessTableAccessAsVariable(
@@ -354,14 +354,14 @@ void ClangValueTypePrinter::printValueTypeDecl(
354354
// Print out the private accessors to the underlying Swift value storage.
355355
os << " ";
356356
printer.printInlineForThunk();
357-
os << "const char * _Nonnull _getOpaquePointer() const { return "
357+
os << "const char * _Nonnull _getOpaquePointer() const noexcept { return "
358358
"_storage";
359359
if (isOpaqueLayout)
360360
os << ".getOpaquePointer()";
361361
os << "; }\n";
362362
os << " ";
363363
printer.printInlineForThunk();
364-
os << "char * _Nonnull _getOpaquePointer() { return _storage";
364+
os << "char * _Nonnull _getOpaquePointer() noexcept { return _storage";
365365
if (isOpaqueLayout)
366366
os << ".getOpaquePointer()";
367367
os << "; }\n";
@@ -370,22 +370,22 @@ void ClangValueTypePrinter::printValueTypeDecl(
370370
if (isa<EnumDecl>(typeDecl)) {
371371
os << " ";
372372
printer.printInlineForThunk();
373-
os << "char * _Nonnull _destructiveProjectEnumData() {\n";
373+
os << "char * _Nonnull _destructiveProjectEnumData() noexcept {\n";
374374
printEnumVWTableVariable();
375375
os << " enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), "
376376
"metadata._0);\n";
377377
os << " return _getOpaquePointer();\n";
378378
os << " }\n";
379379
os << " ";
380380
printer.printInlineForThunk();
381-
os << "void _destructiveInjectEnumTag(unsigned tag) {\n";
381+
os << "void _destructiveInjectEnumTag(unsigned tag) noexcept {\n";
382382
printEnumVWTableVariable();
383383
os << " enumVWTable->destructiveInjectEnumTag(_getOpaquePointer(), tag, "
384384
"metadata._0);\n";
385385
os << " }\n";
386386
os << " ";
387387
printer.printInlineForThunk();
388-
os << "unsigned _getEnumTag() const {\n";
388+
os << "unsigned _getEnumTag() const noexcept {\n";
389389
printEnumVWTableVariable();
390390
os << " return enumVWTable->getEnumTag(_getOpaquePointer(), "
391391
"metadata._0);\n";

lib/PrintAsClang/_SwiftStdlibCxxOverlay.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,28 @@ template <class Collection, class T> class CollectionIterator {
8181
using Index =
8282
decltype(reinterpret_cast<Collection *>(0x123)->getStartIndex());
8383

84-
SWIFT_INLINE_THUNK CollectionIterator(const Collection &c) : collection(c) {
84+
SWIFT_INLINE_THUNK CollectionIterator(const Collection &c) noexcept(
85+
noexcept(c.getStartIndex()) &&noexcept(c.getEndIndex()))
86+
: collection(c) {
8587
index = collection.getStartIndex();
8688
endIndex = collection.getEndIndex();
8789
// FIXME: Begin read access.
8890
}
8991

90-
SWIFT_INLINE_THUNK ~CollectionIterator() {
92+
SWIFT_INLINE_THUNK ~CollectionIterator() noexcept {
9193
// FIXME: End read access.
9294
}
9395

94-
SWIFT_INLINE_THUNK T operator*() const { return collection[index]; }
95-
SWIFT_INLINE_THUNK void operator++() {
96+
SWIFT_INLINE_THUNK T operator*() const noexcept(noexcept(collection[index])) {
97+
return collection[index];
98+
}
99+
SWIFT_INLINE_THUNK void operator++() noexcept(noexcept(++index)) {
96100
++index;
97101
// FIXME: assert(index <= endIndex); // No need to go past the end.
98102
}
99103

100-
SWIFT_INLINE_THUNK bool operator!=(const IterationEndSentinel &) const {
104+
SWIFT_INLINE_THUNK bool
105+
operator!=(const IterationEndSentinel &) const noexcept {
101106
return index != endIndex;
102107
}
103108

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
13
1+
14

test/Interop/SwiftToCxx/enums/swift-enum-implementation.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public struct S {
116116
// CHECK-NEXT: SWIFT_INLINE_THUNK swift::Int getTen() const SWIFT_SYMBOL("s:5Enums1EO3tenSivp");
117117
// CHECK-NEXT: SWIFT_INLINE_THUNK void printSelf() const SWIFT_SYMBOL("s:5Enums1EO9printSelfyyF");
118118
// CHECK-NEXT: private:
119-
// CHECK: SWIFT_INLINE_THUNK char * _Nonnull _destructiveProjectEnumData() {
119+
// CHECK: SWIFT_INLINE_THUNK char * _Nonnull _destructiveProjectEnumData() noexcept {
120120
// CHECK-NEXT: auto metadata = _impl::$s5Enums1EOMa(0);
121121
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
122122
// CHECK-NEXT: #ifdef __arm64e__
@@ -128,7 +128,7 @@ public struct S {
128128
// CHECK-NEXT: enumVWTable->destructiveProjectEnumData(_getOpaquePointer(), metadata._0);
129129
// CHECK-NEXT: return _getOpaquePointer();
130130
// CHECK-NEXT: }
131-
// CHECK-NEXT: SWIFT_INLINE_THUNK void _destructiveInjectEnumTag(unsigned tag) {
131+
// CHECK-NEXT: SWIFT_INLINE_THUNK void _destructiveInjectEnumTag(unsigned tag) noexcept {
132132
// CHECK-NEXT: auto metadata = _impl::$s5Enums1EOMa(0);
133133
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
134134
// CHECK-NEXT: #ifdef __arm64e__
@@ -139,7 +139,7 @@ public struct S {
139139
// CHECK-NEXT: const auto *enumVWTable = reinterpret_cast<swift::_impl::EnumValueWitnessTable *>(vwTable);
140140
// CHECK-NEXT: enumVWTable->destructiveInjectEnumTag(_getOpaquePointer(), tag, metadata._0);
141141
// CHECK-NEXT: }
142-
// CHECK-NEXT: SWIFT_INLINE_THUNK unsigned _getEnumTag() const {
142+
// CHECK-NEXT: SWIFT_INLINE_THUNK unsigned _getEnumTag() const noexcept {
143143
// CHECK-NEXT: auto metadata = _impl::$s5Enums1EOMa(0);
144144
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
145145
// CHECK-NEXT: #ifdef __arm64e__

test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public func inoutConcreteOpt(_ x: inout GenericOpt<UInt16>) {
112112
// CHECK-NEXT: #ifndef __cpp_concepts
113113
// CHECK-NEXT: static_assert(swift::isUsableInGenericContext<T_0_0>, "type cannot be used in a Swift generic context");
114114
// CHECK-NEXT: #endif
115-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~GenericOpt() {
115+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~GenericOpt() noexcept {
116116
// CHECK-NEXT: auto metadata = _impl::$s8Generics10GenericOptOMa(0, swift::TypeMetadataTrait<T_0_0>::getTypeMetadata());
117117
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
118118
// CHECK-NEXT: #ifdef __arm64e__

test/Interop/SwiftToCxx/generics/generic-struct-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public func inoutConcretePair(_ x: UInt16, _ y: inout GenericPair<UInt16, UInt16
226226
// CHECK-NEXT: static_assert(swift::isUsableInGenericContext<T_0_0>, "type cannot be used in a Swift generic context");
227227
// CHECK-NEXT: static_assert(swift::isUsableInGenericContext<T_0_1>, "type cannot be used in a Swift generic context");
228228
// CHECK-NEXT: #endif
229-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~GenericPair() {
229+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~GenericPair() noexcept {
230230
// CHECK-NEXT: auto metadata = _impl::$s8Generics11GenericPairVMa(0, swift::TypeMetadataTrait<T_0_0>::getTypeMetadata(), swift::TypeMetadataTrait<T_0_1>::getTypeMetadata());
231231

232232
// CHECK: swift::_impl::OpaqueStorage _storage;

test/Interop/SwiftToCxx/stdlib/swift-stdlib-in-cxx.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
// CHECK-NEXT: #ifndef __cpp_concepts
3030
// CHECK-NEXT: static_assert(swift::isUsableInGenericContext<T_0_0>, "type cannot be used in a Swift generic context");
3131
// CHECK-NEXT: #endif
32-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~Array() {
32+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~Array() noexcept {
3333
// CHECK: }
34-
// CHECK-NEXT: SWIFT_INLINE_THUNK Array(const Array &other) {
34+
// CHECK-NEXT: SWIFT_INLINE_THUNK Array(const Array &other) noexcept {
3535
// CHECK: }
3636
// CHECK: static SWIFT_INLINE_THUNK Array<T_0_0> init() SWIFT_SYMBOL({{.*}});
3737
// CHECK: SWIFT_INLINE_THUNK void append(const T_0_0& newElement) SWIFT_SYMBOL({{.*}});
@@ -53,9 +53,9 @@
5353
// CHECK-NEXT: #ifndef __cpp_concepts
5454
// CHECK-NEXT: static_assert(swift::isUsableInGenericContext<T_0_0>, "type cannot be used in a Swift generic context");
5555
// CHECK-NEXT: #endif
56-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~Optional() {
56+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~Optional() noexcept {
5757
// CHECK: }
58-
// CHECK-NEXT: SWIFT_INLINE_THUNK Optional(const Optional &other) {
58+
// CHECK-NEXT: SWIFT_INLINE_THUNK Optional(const Optional &other) noexcept {
5959
// CHECK: }
6060
// CHECK: enum class cases {
6161
// CHECK-NEXT: some SWIFT_SYMBOL({{.*}}),
@@ -67,11 +67,11 @@
6767

6868
// CHECK: class SWIFT_SYMBOL({{.*}}) String final {
6969
// CHECK-NEXT: public:
70-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~String() {
70+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~String() noexcept {
7171
// CHECK: }
72-
// CHECK-NEXT: SWIFT_INLINE_THUNK String(const String &other) {
72+
// CHECK-NEXT: SWIFT_INLINE_THUNK String(const String &other) noexcept {
7373
// CHECK: }
74-
// CHECK-NEXT: SWIFT_INLINE_THUNK String(String &&) { abort(); }
74+
// CHECK-NEXT: SWIFT_INLINE_THUNK String(String &&) noexcept { abort(); }
7575
// CHECK-NEXT: static SWIFT_INLINE_THUNK String init() SWIFT_SYMBOL({{.*}});
7676
// CHECK: SWIFT_INLINE_THUNK void append(const String& other)
7777
// CHECK: SWIFT_INLINE_THUNK UTF8View getUtf8() const SWIFT_SYMBOL({{.*}});
@@ -104,7 +104,7 @@
104104
// CHECK-NEXT: private:
105105

106106
// CHECK: class SWIFT_SYMBOL({{.*}}) UTF8View final {
107-
// CHECK: SWIFT_INLINE_THUNK UTF8View(UTF8View &&) { abort(); }
107+
// CHECK: SWIFT_INLINE_THUNK UTF8View(UTF8View &&) noexcept { abort(); }
108108
// CHECK-NEXT: SWIFT_INLINE_THUNK String_Index getStartIndex() const SWIFT_SYMBOL({{.*}});
109109
// CHECK-NEXT: SWIFT_INLINE_THUNK String_Index getEndIndex() const SWIFT_SYMBOL({{.*}});
110110
// CHECK: SWIFT_INLINE_THUNK swift::Optional<String_Index> indexOffsetByLimitedBy(const String_Index& i, swift::Int n, const String_Index& limit) const SWIFT_SYMBOL({{.*}});

test/Interop/SwiftToCxx/structs/resilient-struct-in-cxx.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public struct FirstSmallStruct {
3434

3535
// CHECK: class SWIFT_SYMBOL("s:7Structs16FirstSmallStructV") FirstSmallStruct final {
3636
// CHECK-NEXT: public:
37-
// CHECK: SWIFT_INLINE_THUNK FirstSmallStruct(const FirstSmallStruct &other) {
37+
// CHECK: SWIFT_INLINE_THUNK FirstSmallStruct(const FirstSmallStruct &other) noexcept {
3838
// CHECK-NEXT: auto metadata = _impl::$s7Structs16FirstSmallStructVMa(0);
3939
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
4040
// CHECK-NEXT: #ifdef __arm64e__
@@ -46,8 +46,8 @@ public struct FirstSmallStruct {
4646
// CHECK-NEXT: vwTable->initializeWithCopy(_getOpaquePointer(), const_cast<char *>(other._getOpaquePointer()), metadata._0);
4747
// CHECK-NEXT: }
4848
// CHECK: private:
49-
// CHECK-NEXT: SWIFT_INLINE_THUNK FirstSmallStruct(swift::_impl::ValueWitnessTable * _Nonnull vwTable) : _storage(vwTable->size, vwTable->getAlignment()) {}
50-
// CHECK-NEXT: static SWIFT_INLINE_THUNK FirstSmallStruct _make() {
49+
// CHECK-NEXT: SWIFT_INLINE_THUNK FirstSmallStruct(swift::_impl::ValueWitnessTable * _Nonnull vwTable) noexcept : _storage(vwTable->size, vwTable->getAlignment()) {}
50+
// CHECK-NEXT: static SWIFT_INLINE_THUNK FirstSmallStruct _make() noexcept {
5151
// CHECK-NEXT: auto metadata = _impl::$s7Structs16FirstSmallStructVMa(0);
5252
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
5353
// CHECK-NEXT: #ifdef __arm64e__
@@ -57,8 +57,8 @@ public struct FirstSmallStruct {
5757
// CHECK-NEXT: #endif
5858
// CHECK-NEXT: return FirstSmallStruct(vwTable);
5959
// CHECK-NEXT: }
60-
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const { return _storage.getOpaquePointer(); }
61-
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() { return _storage.getOpaquePointer(); }
60+
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const noexcept { return _storage.getOpaquePointer(); }
61+
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() noexcept { return _storage.getOpaquePointer(); }
6262
// CHECK-EMPTY:
6363
// CHECK-NEXT: swift::_impl::OpaqueStorage _storage;
6464
// CHECK-NEXT: friend class _impl::_impl_FirstSmallStruct;
@@ -133,7 +133,7 @@ public struct LargeStruct {
133133

134134
// CHECK: class SWIFT_SYMBOL("s:7Structs11LargeStructV") LargeStruct final {
135135
// CHECK-NEXT: public:
136-
// CHECK: SWIFT_INLINE_THUNK LargeStruct(const LargeStruct &other) {
136+
// CHECK: SWIFT_INLINE_THUNK LargeStruct(const LargeStruct &other) noexcept {
137137
// CHECK-NEXT: auto metadata = _impl::$s7Structs11LargeStructVMa(0);
138138
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
139139
// CHECK-NEXT: #ifdef __arm64e__
@@ -145,8 +145,8 @@ public struct LargeStruct {
145145
// CHECK-NEXT: vwTable->initializeWithCopy(_getOpaquePointer(), const_cast<char *>(other._getOpaquePointer()), metadata._0);
146146
// CHECK-NEXT: }
147147
// CHECK: private:
148-
// CHECK-NEXT: SWIFT_INLINE_THUNK LargeStruct(swift::_impl::ValueWitnessTable * _Nonnull vwTable) : _storage(vwTable->size, vwTable->getAlignment()) {}
149-
// CHECK-NEXT: static SWIFT_INLINE_THUNK LargeStruct _make() {
148+
// CHECK-NEXT: SWIFT_INLINE_THUNK LargeStruct(swift::_impl::ValueWitnessTable * _Nonnull vwTable) noexcept : _storage(vwTable->size, vwTable->getAlignment()) {}
149+
// CHECK-NEXT: static SWIFT_INLINE_THUNK LargeStruct _make() noexcept {
150150
// CHECK-NEXT: auto metadata = _impl::$s7Structs11LargeStructVMa(0);
151151
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
152152
// CHECK-NEXT: #ifdef __arm64e__
@@ -156,8 +156,8 @@ public struct LargeStruct {
156156
// CHECK-NEXT: #endif
157157
// CHECK-NEXT: return LargeStruct(vwTable);
158158
// CHECK-NEXT: }
159-
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const { return _storage.getOpaquePointer(); }
160-
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() { return _storage.getOpaquePointer(); }
159+
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const noexcept { return _storage.getOpaquePointer(); }
160+
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() noexcept { return _storage.getOpaquePointer(); }
161161
// CHECK-EMPTY:
162162
// CHECK-NEXT: swift::_impl::OpaqueStorage _storage;
163163
// CHECK-NEXT: friend class _impl::_impl_LargeStruct;
@@ -195,7 +195,7 @@ public struct StructWithRefCountStoredProp {
195195
}
196196
}
197197

198-
// CHECK: SWIFT_INLINE_THUNK StructWithRefCountStoredProp(swift::_impl::ValueWitnessTable * _Nonnull vwTable) : _storage(vwTable->size, vwTable->getAlignment()) {}
198+
// CHECK: SWIFT_INLINE_THUNK StructWithRefCountStoredProp(swift::_impl::ValueWitnessTable * _Nonnull vwTable) noexcept : _storage(vwTable->size, vwTable->getAlignment()) {}
199199

200200
public func createLargeStruct(_ x: Int) -> LargeStruct {
201201
return LargeStruct(x1: x, x2: -x, x3: x * 2, x4: x - 4, x5: 0, x6: 21)

test/Interop/SwiftToCxx/structs/struct-with-refcounted-member.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public func printBreak(_ x: Int) {
2727

2828
// CHECK: class SWIFT_SYMBOL({{.*}}) StructWithRefcountedMember final {
2929
// CHECK-NEXT: public:
30-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~StructWithRefcountedMember() {
30+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~StructWithRefcountedMember() noexcept {
3131
// CHECK-NEXT: auto metadata = _impl::$s7Structs26StructWithRefcountedMemberVMa(0);
3232
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
3333
// CHECK-NEXT: #ifdef __arm64e__
@@ -37,7 +37,7 @@ public func printBreak(_ x: Int) {
3737
// CHECK-NEXT: #endif
3838
// CHECK-NEXT: vwTable->destroy(_getOpaquePointer(), metadata._0);
3939
// CHECK-NEXT: }
40-
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithRefcountedMember(const StructWithRefcountedMember &other) {
40+
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithRefcountedMember(const StructWithRefcountedMember &other) noexcept {
4141
// CHECK-NEXT: auto metadata = _impl::$s7Structs26StructWithRefcountedMemberVMa(0);
4242
// CHECK-NEXT: auto *vwTableAddr = reinterpret_cast<swift::_impl::ValueWitnessTable **>(metadata._0) - 1;
4343
// CHECK-NEXT: #ifdef __arm64e__
@@ -47,5 +47,5 @@ public func printBreak(_ x: Int) {
4747
// CHECK-NEXT: #endif
4848
// CHECK-NEXT: vwTable->initializeWithCopy(_getOpaquePointer(), const_cast<char *>(other._getOpaquePointer()), metadata._0);
4949
// CHECK-NEXT: }
50-
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithRefcountedMember(StructWithRefcountedMember &&) { abort(); }
50+
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithRefcountedMember(StructWithRefcountedMember &&) noexcept { abort(); }
5151
// CHECK-NEXT: private:

test/Interop/SwiftToCxx/structs/swift-struct-in-cxx.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@
3434

3535
// CHECK: class SWIFT_SYMBOL("s:7Structs18StructWithIntFieldV") StructWithIntField final {
3636
// CHECK-NEXT: public:
37-
// CHECK-NEXT: SWIFT_INLINE_THUNK ~StructWithIntField() {
37+
// CHECK-NEXT: SWIFT_INLINE_THUNK ~StructWithIntField() noexcept {
3838
// CHECK: }
39-
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithIntField(const StructWithIntField &other) {
39+
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithIntField(const StructWithIntField &other) noexcept {
4040
// CHECK: }
41-
// CHECK-NEXT: noreturn]] SWIFT_INLINE_THUNK StructWithIntField(StructWithIntField &&) { abort(); }
41+
// CHECK-NEXT: noreturn]] SWIFT_INLINE_THUNK StructWithIntField(StructWithIntField &&) noexcept { abort(); }
4242
// CHECK-NEXT: private:
43-
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithIntField() {}
44-
// CHECK-NEXT: static SWIFT_INLINE_THUNK StructWithIntField _make() { return StructWithIntField(); }
45-
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const { return _storage; }
46-
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() { return _storage; }
43+
// CHECK-NEXT: SWIFT_INLINE_THUNK StructWithIntField() noexcept {}
44+
// CHECK-NEXT: static SWIFT_INLINE_THUNK StructWithIntField _make() noexcept { return StructWithIntField(); }
45+
// CHECK-NEXT: SWIFT_INLINE_THUNK const char * _Nonnull _getOpaquePointer() const noexcept { return _storage; }
46+
// CHECK-NEXT: SWIFT_INLINE_THUNK char * _Nonnull _getOpaquePointer() noexcept { return _storage; }
4747
// CHECK-EMPTY:
4848
// CHECK-NEXT: alignas(8) char _storage[8];
4949
// CHECK-NEXT: friend class _impl::_impl_StructWithIntField;

0 commit comments

Comments
 (0)