Skip to content

Commit 03e175a

Browse files
committed
[Test] Added for call-as-async Optional<NS_EXTENSIBLE_STRING_ENUM>.
The underlying problem was fixed by the change for rdar://81590807 . Add tests for the specific case that was originally reported. rdar://80704382
1 parent 6eb4f2c commit 03e175a

File tree

5 files changed

+75
-0
lines changed

5 files changed

+75
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#define MAIN_ACTOR __attribute__((__swift_attr__("@MainActor")))
77
#define MAIN_ACTOR_UNSAFE __attribute__((__swift_attr__("@_unsafeMainActor")))
88

9+
#define NS_EXTENSIBLE_STRING_ENUM __attribute__((swift_wrapper(struct)));
10+
typedef NSString *Flavor NS_EXTENSIBLE_STRING_ENUM;
11+
912
@protocol ServiceProvider
1013
@property(readonly) NSArray<NSString *> *allOperations;
1114
-(void)allOperationsWithCompletionHandler:(void (^)(NSArray<NSString *> *))completion;
@@ -88,6 +91,8 @@ typedef void (^CompletionHandler)(NSString * _Nullable, NSString * _Nullable_res
8891
NSError *_Nullable,
8992
BOOL))completionHandler
9093
__attribute__((swift_async_error(zero_argument, 3)));
94+
- (void)getIceCreamFlavorWithCompletionHandler:
95+
(void (^)(Flavor flavor, NSError *__nullable error))completionHandler;
9196
@end
9297

9398
@protocol RefrigeratorDelegate<NSObject>

test/SILGen/objc_async.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ func testSlowServer(slowServer: SlowServer) async throws {
8787
let _: String = try await slowServer.findAnswerFailingly()
8888

8989
let _: () -> Void = try await slowServer.obtainClosure()
90+
91+
let _: Flavor = try await slowServer.iceCreamFlavor()
9092
}
9193

9294
func testGeneric<T: AnyObject>(x: GenericObject<T>) async throws {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <Foundation/Foundation.h>
2+
3+
#pragma clang assume_nonnull begin
4+
5+
typedef NSString *FileProviderItemIdentifier NS_EXTENSIBLE_STRING_ENUM;
6+
FileProviderItemIdentifier const
7+
FileProviderRootContainerItemIdentifier NS_SWIFT_NAME(FileProviderItemIdentifier.rootContainer);
8+
FileProviderItemIdentifier const
9+
FileProviderWorkingSetContainerItemIdentifier NS_SWIFT_NAME(FileProviderItemIdentifier.workingSet);
10+
FileProviderItemIdentifier const
11+
FileProviderTrashContainerItemIdentifier NS_SWIFT_NAME(FileProviderItemIdentifier.trashContainer);
12+
typedef NSString *FileProviderDomainIdentifier NS_EXTENSIBLE_STRING_ENUM;
13+
14+
@interface PFXObject : NSObject
15+
+ (void)getIdentifierForUserVisibleFileAtURL:(NSURL *)url
16+
completionHandler:
17+
(void (^)(FileProviderItemIdentifier __nullable
18+
itemIdentifier,
19+
FileProviderDomainIdentifier __nullable
20+
domainIdentifier,
21+
NSError *__nullable error))
22+
completionHandler;
23+
@end
24+
25+
#pragma clang assume_nonnull end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "rdar80704382.h"
2+
3+
#pragma clang assume_nonnull begin
4+
5+
@implementation PFXObject
6+
- (instancetype)init {
7+
if (self = [super init]) {
8+
}
9+
return self;
10+
}
11+
+ (void)getIdentifierForUserVisibleFileAtURL:(NSURL *)url
12+
completionHandler:
13+
(void (^)(FileProviderItemIdentifier __nullable
14+
itemIdentifier,
15+
FileProviderDomainIdentifier __nullable
16+
domainIdentifier,
17+
NSError *__nullable error))
18+
completionHandler {
19+
completionHandler(@"item_id", @"file_id", NULL);
20+
}
21+
@end
22+
23+
#pragma clang assume_nonnull end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-clang %S/Inputs/rdar80704382.m -I %S/Inputs -c -o %t/rdar80704382.o
3+
// RUN: %target-build-swift -Xfrontend -disable-availability-checking -import-objc-header %S/Inputs/rdar80704382.h -Xlinker %t/rdar80704382.o -parse-as-library %s -o %t/main
4+
// RUN: %target-codesign %t/main
5+
// RUN: %target-run %t/main | %FileCheck %s
6+
7+
// REQUIRES: executable_test
8+
// REQUIRES: objc_interop
9+
10+
func run() async throws {
11+
// CHECK: item_id
12+
// CHECK: file_id
13+
print(try await PFXObject.identifierForUserVisibleFile(at: URL(fileURLWithPath: "/tmp/file")))
14+
}
15+
16+
@main struct Main {
17+
static func main() async throws {
18+
try await run()
19+
}
20+
}

0 commit comments

Comments
 (0)