Skip to content

Commit e7ea37f

Browse files
committed
print C's abort in default branch
1 parent 3dc7ff2 commit e7ea37f

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

lib/PrintAsClang/DeclAndTypePrinter.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,14 +413,11 @@ class DeclAndTypePrinter::Implementation
413413
os << " inline operator cases() const {\n";
414414
os << " switch (_getEnumTag()) {\n";
415415
for (const auto &pair : elementTagMapping) {
416-
if (pair == *elementTagMapping.crbegin()) {
417-
os << " case " << pair.second << ": default: return cases::";
418-
} else {
419-
os << " case " << pair.second << ": return cases::";
420-
}
416+
os << " case " << pair.second << ": return cases::";
421417
syntaxPrinter.printIdentifier(pair.first->getNameStr());
422418
os << ";\n";
423419
}
420+
os << " default: abort();\n";
424421
os << " }\n"; // switch's closing bracket
425422
os << " }\n"; // operator cases()'s closing bracket
426423

test/Inputs/clang-importer-sdk/usr/include/stdlib.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ void free(void *);
1616
ldiv_t ldiv(long int, long int);
1717
lldiv_t lldiv(long long int, long long int);
1818

19+
_Noreturn void abort(void);
20+
1921
#endif // SDK_STDLIB_H

test/Interop/SwiftToCxx/enums/swift-enum-case-functions.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
169169
// CHECK-NEXT: switch (_getEnumTag()) {
170170
// CHECK-NEXT: case 0: return cases::one;
171171
// CHECK-NEXT: case 1: return cases::two;
172-
// CHECK-NEXT: case 2: default: return cases::three;
172+
// CHECK-NEXT: case 2: return cases::three;
173+
// CHECK-NEXT: default: abort();
173174
// CHECK-NEXT: }
174175
// CHECK-NEXT: }
175176
// CHECK-NEXT: inline bool isOne() const {
@@ -194,7 +195,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
194195
// CHECK-NEXT: switch (_getEnumTag()) {
195196
// CHECK-NEXT: case 1: return cases::Paragraph;
196197
// CHECK-NEXT: case 0: return cases::Char;
197-
// CHECK-NEXT: case 2: default: return cases::Chapter;
198+
// CHECK-NEXT: case 2: return cases::Chapter;
199+
// CHECK-NEXT: default: abort();
198200
// CHECK-NEXT: }
199201
// CHECK-NEXT: }
200202
// CHECK-NEXT: inline bool isParagraph() const {
@@ -217,7 +219,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
217219

218220
// CHECK: inline operator cases() const {
219221
// CHECK-NEXT: switch (_getEnumTag()) {
220-
// CHECK-NEXT: case 0: default: return cases::one;
222+
// CHECK-NEXT: case 0: return cases::one;
223+
// CHECK-NEXT: default: abort();
221224
// CHECK-NEXT: }
222225
// CHECK-NEXT: }
223226
// CHECK-NEXT: inline bool isOne() const {
@@ -236,7 +239,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
236239
// CHECK-NEXT: switch (_getEnumTag()) {
237240
// CHECK-NEXT: case 0: return cases::Int;
238241
// CHECK-NEXT: case 1: return cases::Double;
239-
// CHECK-NEXT: case 2: default: return cases::Bignum;
242+
// CHECK-NEXT: case 2: return cases::Bignum;
243+
// CHECK-NEXT: default: abort();
240244
// CHECK-NEXT: }
241245
// CHECK-NEXT: }
242246
// CHECK-NEXT: inline bool isInt() const {
@@ -261,7 +265,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
261265
// CHECK-NEXT: switch (_getEnumTag()) {
262266
// CHECK-NEXT: case 1: return cases::NegInfinity;
263267
// CHECK-NEXT: case 0: return cases::Int;
264-
// CHECK-NEXT: case 2: default: return cases::PosInfinity;
268+
// CHECK-NEXT: case 2: return cases::PosInfinity;
269+
// CHECK-NEXT: default: abort();
265270
// CHECK-NEXT: }
266271
// CHECK-NEXT: }
267272
// CHECK-NEXT: inline bool isNegInfinity() const {
@@ -289,7 +294,8 @@ public func checkIntDoubleOrBignum(_ x: IntDoubleOrBignum, tag: Int) -> Bool {
289294
// CHECK-NEXT: case 1: return cases::Bold;
290295
// CHECK-NEXT: case 2: return cases::Underline;
291296
// CHECK-NEXT: case 3: return cases::Blink;
292-
// CHECK-NEXT: case 5: default: return cases::Empty;
297+
// CHECK-NEXT: case 5: return cases::Empty;
298+
// CHECK-NEXT: default: abort();
293299
// CHECK-NEXT: }
294300
// CHECK-NEXT: }
295301
// CHECK-NEXT: inline bool isCursor() const {

0 commit comments

Comments
 (0)