forked from OSchip/llvm-project
90 lines
1.9 KiB
Objective-C
90 lines
1.9 KiB
Objective-C
// RUN: mkdir -p %t
|
|
// RUN: %clang_cc1 -emit-module -o %t/diamond_top.pcm %s -D MODULE_TOP
|
|
// RUN: %clang_cc1 -fmodule-cache-path %t -fdisable-module-hash -emit-module -o %t/diamond_left.pcm %s -D MODULE_LEFT
|
|
// RUN: %clang_cc1 -fmodule-cache-path %t -fdisable-module-hash -emit-module -o %t/diamond_right.pcm %s -D MODULE_RIGHT
|
|
// RUN: %clang_cc1 -fmodule-cache-path %t -fdisable-module-hash -emit-module -o %t/diamond_bottom.pcm %s -D MODULE_BOTTOM
|
|
// RUN: %clang_cc1 -fmodule-cache-path %t -fdisable-module-hash %s -verify
|
|
|
|
/*============================================================================*/
|
|
#ifdef MODULE_TOP
|
|
|
|
@interface Foo
|
|
@end
|
|
|
|
@interface Foo(Top)
|
|
-(void)top;
|
|
@end
|
|
|
|
/*============================================================================*/
|
|
#elif defined(MODULE_LEFT)
|
|
|
|
__import_module__ diamond_top;
|
|
|
|
@interface Foo(Left)
|
|
-(void)left;
|
|
@end
|
|
|
|
@interface LeftFoo
|
|
-(void)left;
|
|
@end
|
|
|
|
@interface Foo(Duplicate) // expected-note {{previous definition}}
|
|
@end
|
|
|
|
@interface Foo(Duplicate)
|
|
@end
|
|
|
|
/*============================================================================*/
|
|
#elif defined(MODULE_RIGHT)
|
|
|
|
__import_module__ diamond_top;
|
|
|
|
@interface Foo(Right1)
|
|
-(void)right1;
|
|
@end
|
|
|
|
@interface Foo(Right2)
|
|
-(void)right2;
|
|
@end
|
|
|
|
@interface Foo(Duplicate) // expected-warning {{duplicate definition of category}}
|
|
@end
|
|
|
|
/*============================================================================*/
|
|
#elif defined(MODULE_BOTTOM)
|
|
|
|
__import_module__ diamond_left;
|
|
|
|
@interface Foo(Bottom)
|
|
-(void)bottom;
|
|
@end
|
|
|
|
__import_module__ diamond_right;
|
|
|
|
@interface LeftFoo(Bottom)
|
|
-(void)bottom;
|
|
@end
|
|
|
|
/*============================================================================*/
|
|
#else
|
|
|
|
__import_module__ diamond_bottom;
|
|
|
|
@interface Foo(Source)
|
|
-(void)source;
|
|
@end
|
|
|
|
void test(Foo *foo, LeftFoo *leftFoo) {
|
|
[foo source];
|
|
[foo bottom];
|
|
[foo left];
|
|
[foo right1];
|
|
[foo right2];
|
|
[foo top];
|
|
|
|
[leftFoo left];
|
|
[leftFoo bottom];
|
|
}
|
|
|
|
#endif
|