Skip to content

Commit 7c69da7

Browse files
committed
ObjCRuntime: format and update dispatch archs
1 parent c9dd0b7 commit 7c69da7

File tree

1 file changed

+133
-80
lines changed

1 file changed

+133
-80
lines changed

clang/include/clang/Basic/ObjCRuntime.h

Lines changed: 133 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,20 @@ class ObjCRuntime {
8181
/// "non-fragile" ABI?
8282
bool isNonFragile() const {
8383
switch (getKind()) {
84-
case FragileMacOSX: return false;
85-
case GCC: return false;
86-
case MacOSX: return true;
87-
case GNUstep: return true;
88-
case ObjFW: return true;
89-
case iOS: return true;
90-
case WatchOS: return true;
84+
case FragileMacOSX:
85+
return false;
86+
case GCC:
87+
return false;
88+
case MacOSX:
89+
return true;
90+
case GNUstep:
91+
return true;
92+
case ObjFW:
93+
return true;
94+
case iOS:
95+
return true;
96+
case WatchOS:
97+
return true;
9198
}
9299
llvm_unreachable("bad kind");
93100
}
@@ -100,23 +107,24 @@ class ObjCRuntime {
100107
bool isLegacyDispatchDefaultForArch(llvm::Triple::ArchType Arch) {
101108
// The GNUstep runtime uses a newer dispatch method by default from
102109
// version 1.6 onwards
103-
if (getKind() == GNUstep && getVersion() >= VersionTuple(1, 6)) {
110+
if (getKind() == GNUstep) {
104111
switch (Arch) {
105112
case llvm::Triple::arm:
106113
case llvm::Triple::x86:
107114
case llvm::Triple::x86_64:
115+
return !(getVersion() >= VersionTuple(1, 6));
108116
case llvm::Triple::aarch64:
109117
case llvm::Triple::mips64:
118+
return !(getVersion() >= VersionTuple(1, 9));
110119
case llvm::Triple::riscv64:
111-
return false;
120+
return !(getVersion() >= VersionTuple(2, 2));
112121
default:
113122
return true;
114123
}
115-
}
116-
else if ((getKind() == MacOSX) && isNonFragile() &&
117-
(getVersion() >= VersionTuple(10, 0)) &&
118-
(getVersion() < VersionTuple(10, 6)))
119-
return Arch != llvm::Triple::x86_64;
124+
} else if ((getKind() == MacOSX) && isNonFragile() &&
125+
(getVersion() >= VersionTuple(10, 0)) &&
126+
(getVersion() < VersionTuple(10, 6)))
127+
return Arch != llvm::Triple::x86_64;
120128
// Except for deployment target of 10.5 or less,
121129
// Mac runtimes use legacy dispatch everywhere now.
122130
return true;
@@ -151,12 +159,18 @@ class ObjCRuntime {
151159
case FragileMacOSX:
152160
// No stub library for the fragile runtime.
153161
return getVersion() >= VersionTuple(10, 7);
154-
case MacOSX: return true;
155-
case iOS: return true;
156-
case WatchOS: return true;
157-
case GCC: return false;
158-
case GNUstep: return true;
159-
case ObjFW: return true;
162+
case MacOSX:
163+
return true;
164+
case iOS:
165+
return true;
166+
case WatchOS:
167+
return true;
168+
case GCC:
169+
return false;
170+
case GNUstep:
171+
return true;
172+
case ObjFW:
173+
return true;
160174
}
161175
llvm_unreachable("bad kind");
162176
}
@@ -168,14 +182,21 @@ class ObjCRuntime {
168182
/// library.
169183
bool hasNativeARC() const {
170184
switch (getKind()) {
171-
case FragileMacOSX: return getVersion() >= VersionTuple(10, 7);
172-
case MacOSX: return getVersion() >= VersionTuple(10, 7);
173-
case iOS: return getVersion() >= VersionTuple(5);
174-
case WatchOS: return true;
175-
176-
case GCC: return false;
177-
case GNUstep: return getVersion() >= VersionTuple(1, 6);
178-
case ObjFW: return true;
185+
case FragileMacOSX:
186+
return getVersion() >= VersionTuple(10, 7);
187+
case MacOSX:
188+
return getVersion() >= VersionTuple(10, 7);
189+
case iOS:
190+
return getVersion() >= VersionTuple(5);
191+
case WatchOS:
192+
return true;
193+
194+
case GCC:
195+
return false;
196+
case GNUstep:
197+
return getVersion() >= VersionTuple(1, 6);
198+
case ObjFW:
199+
return true;
179200
}
180201
llvm_unreachable("bad kind");
181202
}
@@ -273,23 +294,21 @@ class ObjCRuntime {
273294
/// Does this runtime supports optimized setter entrypoints?
274295
bool hasOptimizedSetter() const {
275296
switch (getKind()) {
276-
case MacOSX:
277-
return getVersion() >= VersionTuple(10, 8);
278-
case iOS:
279-
return (getVersion() >= VersionTuple(6));
280-
case WatchOS:
281-
return true;
282-
case GNUstep:
283-
return getVersion() >= VersionTuple(1, 7);
284-
default:
285-
return false;
297+
case MacOSX:
298+
return getVersion() >= VersionTuple(10, 8);
299+
case iOS:
300+
return (getVersion() >= VersionTuple(6));
301+
case WatchOS:
302+
return true;
303+
case GNUstep:
304+
return getVersion() >= VersionTuple(1, 7);
305+
default:
306+
return false;
286307
}
287308
}
288309

289310
/// Does this runtime allow the use of __weak?
290-
bool allowsWeak() const {
291-
return hasNativeWeak();
292-
}
311+
bool allowsWeak() const { return hasNativeWeak(); }
293312

294313
/// Does this runtime natively provide ARC-compliant 'weak'
295314
/// entrypoints?
@@ -304,25 +323,30 @@ class ObjCRuntime {
304323
/// This is really a property of the library, not the runtime.
305324
bool hasSubscripting() const {
306325
switch (getKind()) {
307-
case FragileMacOSX: return false;
308-
case MacOSX: return getVersion() >= VersionTuple(10, 11);
309-
case iOS: return getVersion() >= VersionTuple(9);
310-
case WatchOS: return true;
326+
case FragileMacOSX:
327+
return false;
328+
case MacOSX:
329+
return getVersion() >= VersionTuple(10, 11);
330+
case iOS:
331+
return getVersion() >= VersionTuple(9);
332+
case WatchOS:
333+
return true;
311334

312335
// This is really a lie, because some implementations and versions
313336
// of the runtime do not support ARC. Probably -fgnu-runtime
314337
// should imply a "maximal" runtime or something?
315-
case GCC: return true;
316-
case GNUstep: return true;
317-
case ObjFW: return true;
338+
case GCC:
339+
return true;
340+
case GNUstep:
341+
return true;
342+
case ObjFW:
343+
return true;
318344
}
319345
llvm_unreachable("bad kind");
320346
}
321347

322348
/// Does this runtime allow sizeof or alignof on object types?
323-
bool allowsSizeofAlignof() const {
324-
return isFragile();
325-
}
349+
bool allowsSizeofAlignof() const { return isFragile(); }
326350

327351
/// Does this runtime allow pointer arithmetic on objects?
328352
///
@@ -354,41 +378,62 @@ class ObjCRuntime {
354378
/// without it, abort() must be used in pure ObjC files.
355379
bool hasTerminate() const {
356380
switch (getKind()) {
357-
case FragileMacOSX: return getVersion() >= VersionTuple(10, 8);
358-
case MacOSX: return getVersion() >= VersionTuple(10, 8);
359-
case iOS: return getVersion() >= VersionTuple(5);
360-
case WatchOS: return true;
361-
case GCC: return false;
362-
case GNUstep: return false;
363-
case ObjFW: return false;
381+
case FragileMacOSX:
382+
return getVersion() >= VersionTuple(10, 8);
383+
case MacOSX:
384+
return getVersion() >= VersionTuple(10, 8);
385+
case iOS:
386+
return getVersion() >= VersionTuple(5);
387+
case WatchOS:
388+
return true;
389+
case GCC:
390+
return false;
391+
case GNUstep:
392+
return false;
393+
case ObjFW:
394+
return false;
364395
}
365396
llvm_unreachable("bad kind");
366397
}
367398

368399
/// Does this runtime support weakly importing classes?
369400
bool hasWeakClassImport() const {
370401
switch (getKind()) {
371-
case MacOSX: return true;
372-
case iOS: return true;
373-
case WatchOS: return true;
374-
case FragileMacOSX: return false;
375-
case GCC: return true;
376-
case GNUstep: return true;
377-
case ObjFW: return true;
402+
case MacOSX:
403+
return true;
404+
case iOS:
405+
return true;
406+
case WatchOS:
407+
return true;
408+
case FragileMacOSX:
409+
return false;
410+
case GCC:
411+
return true;
412+
case GNUstep:
413+
return true;
414+
case ObjFW:
415+
return true;
378416
}
379417
llvm_unreachable("bad kind");
380418
}
381419

382420
/// Does this runtime use zero-cost exceptions?
383421
bool hasUnwindExceptions() const {
384422
switch (getKind()) {
385-
case MacOSX: return true;
386-
case iOS: return true;
387-
case WatchOS: return true;
388-
case FragileMacOSX: return false;
389-
case GCC: return true;
390-
case GNUstep: return true;
391-
case ObjFW: return true;
423+
case MacOSX:
424+
return true;
425+
case iOS:
426+
return true;
427+
case WatchOS:
428+
return true;
429+
case FragileMacOSX:
430+
return false;
431+
case GCC:
432+
return true;
433+
case GNUstep:
434+
return true;
435+
case ObjFW:
436+
return true;
392437
}
393438
llvm_unreachable("bad kind");
394439
}
@@ -402,7 +447,8 @@ class ObjCRuntime {
402447
return true;
403448
case GNUstep:
404449
return getVersion() >= VersionTuple(1, 7);
405-
default: return false;
450+
default:
451+
return false;
406452
}
407453
}
408454

@@ -457,13 +503,20 @@ class ObjCRuntime {
457503
/// Does this runtime supports direct dispatch
458504
bool allowsDirectDispatch() const {
459505
switch (getKind()) {
460-
case FragileMacOSX: return false;
461-
case MacOSX: return true;
462-
case iOS: return true;
463-
case WatchOS: return true;
464-
case GCC: return false;
465-
case GNUstep: return false;
466-
case ObjFW: return false;
506+
case FragileMacOSX:
507+
return false;
508+
case MacOSX:
509+
return true;
510+
case iOS:
511+
return true;
512+
case WatchOS:
513+
return true;
514+
case GCC:
515+
return false;
516+
case GNUstep:
517+
return false;
518+
case ObjFW:
519+
return false;
467520
}
468521
llvm_unreachable("bad kind");
469522
}

0 commit comments

Comments
 (0)