-
Notifications
You must be signed in to change notification settings - Fork 11.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[modules] Update visibility for merged ObjCInterfaceDecl definitions.
We keep using the first encountered definition and need to take into account visibility from subsequent definitions. For example, if the first definition is hidden and the second is visible, we need to make the first one visible too. rdar://82263843 Differential Revision: https://reviews.llvm.org/D110453
- Loading branch information
Showing
2 changed files
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// RUN: rm -rf %t | ||
// RUN: split-file %s %t | ||
// RUN: %clang_cc1 -emit-llvm -o %t/test.bc -F%t/Frameworks %t/test.m -DHIDDEN_FIRST=1 \ | ||
// RUN: -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache | ||
// RUN: %clang_cc1 -emit-llvm -o %t/test.bc -F%t/Frameworks %t/test.m -DHIDDEN_FIRST=0 \ | ||
// RUN: -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache | ||
|
||
// Test a case when Objective-C interface is imported both as hidden and as visible. | ||
|
||
//--- Frameworks/Foundation.framework/Headers/Foundation.h | ||
@interface NSObject | ||
@end | ||
|
||
//--- Frameworks/Foundation.framework/Modules/module.modulemap | ||
framework module Foundation { | ||
header "Foundation.h" | ||
export * | ||
} | ||
|
||
//--- Frameworks/Regular.framework/Headers/Regular.h | ||
#import <Foundation/Foundation.h> | ||
@interface Regular : NSObject | ||
@end | ||
|
||
//--- Frameworks/Regular.framework/Modules/module.modulemap | ||
framework module Regular { | ||
header "Regular.h" | ||
export * | ||
} | ||
|
||
//--- Frameworks/RegularHider.framework/Headers/Visible.h | ||
// Empty, file required to create a module. | ||
|
||
//--- Frameworks/RegularHider.framework/Headers/Hidden.h | ||
#import <Foundation/Foundation.h> | ||
@interface Regular : NSObject | ||
@end | ||
|
||
//--- Frameworks/RegularHider.framework/Modules/module.modulemap | ||
framework module RegularHider { | ||
header "Visible.h" | ||
export * | ||
|
||
explicit module Hidden { | ||
header "Hidden.h" | ||
export * | ||
} | ||
} | ||
|
||
//--- test.m | ||
|
||
#if HIDDEN_FIRST | ||
#import <RegularHider/Visible.h> | ||
#import <Regular/Regular.h> | ||
#else | ||
#import <Regular/Regular.h> | ||
#import <RegularHider/Visible.h> | ||
#endif | ||
|
||
@interface SubClass : Regular | ||
@end |