xref: /llvm-project/clang/test/Modules/override.m (revision b7ada67f1c28ae67c61578dd3bc8acb4d8d55d28)
1// UNSUPPORTED: target={{.*}}-aix{{.*}}
2// RUN: rm -rf %t
3// RUN: split-file %s %t
4// RUN: %clang_cc1 -fsyntax-only -I%t/include %t/test.m \
5// RUN:            -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache -fmodule-name=CheckOverride
6
7// Test that if we have the same method in a different module, it's not an
8// override as it is the same method and it has the same DeclContext but a
9// different object in the memory.
10
11
12//--- include/CheckOverride.h
13@interface NSObject
14@end
15
16@interface CheckOverrideInterfaceOnly: NSObject
17- (void)potentialOverrideInterfaceOnly;
18@end
19
20@interface CheckOverrideCategoryOnly: NSObject
21@end
22@interface CheckOverrideCategoryOnly(CategoryOnly)
23- (void)potentialOverrideCategoryOnly;
24@end
25
26@interface CheckOverrideImplementationOfInterface: NSObject
27- (void)potentialOverrideImplementationOfInterface;
28@end
29
30@interface CheckOverrideImplementationOfCategory: NSObject
31@end
32@interface CheckOverrideImplementationOfCategory(CategoryImpl)
33- (void)potentialOverrideImplementationOfCategory;
34@end
35
36//--- include/Redirect.h
37// Ensure CheckOverride is imported as the module despite all `-fmodule-name` flags.
38#import <CheckOverride.h>
39
40//--- include/module.modulemap
41module CheckOverride {
42  header "CheckOverride.h"
43}
44module Redirect {
45  header "Redirect.h"
46  export *
47}
48
49//--- test.m
50#import <CheckOverride.h>
51#import <Redirect.h>
52
53@implementation CheckOverrideImplementationOfInterface
54- (void)potentialOverrideImplementationOfInterface {}
55@end
56
57@implementation CheckOverrideImplementationOfCategory
58- (void)potentialOverrideImplementationOfCategory {}
59@end
60
61void triggerOverrideCheck(CheckOverrideInterfaceOnly *intfOnly,
62                          CheckOverrideCategoryOnly *catOnly,
63                          CheckOverrideImplementationOfInterface *intfImpl,
64                          CheckOverrideImplementationOfCategory *catImpl) {
65  [intfOnly potentialOverrideInterfaceOnly];
66  [catOnly potentialOverrideCategoryOnly];
67  [intfImpl potentialOverrideImplementationOfInterface];
68  [catImpl potentialOverrideImplementationOfCategory];
69}
70