Files
swift-mirror/test/SILOptimizer/Inputs/objc_bridging_opt/objc.m
Erik Eckstein ec3d9dd9c7 Optimizer: add the ObjCBridgingOptimization to optimize ObjectiveC bridging operations.
Removes redundant ObjectiveC <-> Swift bridging calls.
Basically, if a value is bridged from ObjectiveC to Swift an then back to ObjectiveC again, then just re-use the original ObjectiveC value.

Also in this commit: add an additional DCE pass before ownership elimination. It can cleanup dead code which is left behind by the ObjCBridgingOptimization.

rdar://89987440
2022-06-08 22:51:57 +02:00

44 lines
886 B
Objective-C

#include "objc.h"
#include <stdio.h>
void useNSString(NSString * _Nonnull s) {
const char *str = [s cStringUsingEncoding: NSUTF8StringEncoding];
if (str[0] == '\0') {
puts("<empty>");
} else {
puts(str);
}
}
void useOptNSString(NSString * _Nullable s) {
if (s) {
const char *str = [s cStringUsingEncoding: NSUTF8StringEncoding];
puts(str);
} else {
puts("NULL");
}
}
NSString * _Nonnull returnNSString() {
NSString *str = [[NSString alloc] initWithCString: "This is an ObjectiveC string!" encoding: NSUTF8StringEncoding];
return str;
}
NSString *g;
NSString * _Nonnull returnNullNSString() {
return g;
}
NSString * _Nullable returnOptNSString(BOOL some) {
if (some) {
NSString *str = [[NSString alloc] initWithCString: "This is an optional ObjectiveC string!" encoding: NSUTF8StringEncoding];
return str;
}
return NULL;
}