diff options
-rw-r--r-- | clang/test/SemaObjC/ivar-lookup.m | 19 | ||||
-rw-r--r-- | clang/test/SemaObjCXX/ivar-lookup.mm | 18 |
2 files changed, 37 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/ivar-lookup.m b/clang/test/SemaObjC/ivar-lookup.m index 644b3b638c9..06e47116f73 100644 --- a/clang/test/SemaObjC/ivar-lookup.m +++ b/clang/test/SemaObjC/ivar-lookup.m @@ -16,3 +16,22 @@ extern struct foo x; } @end + +@interface Ivar +- (float*)method; +@end + +@interface A { + A *Ivar; +} +- (int*)method; +@end + +@implementation A +- (int*)method { + int *ip = [Ivar method]; // expected-warning{{warning: incompatible pointer types initializing 'int *' with an expression of type 'float *'}} + // Note that there is no warning in Objective-C++ + return 0; +} +@end + diff --git a/clang/test/SemaObjCXX/ivar-lookup.mm b/clang/test/SemaObjCXX/ivar-lookup.mm new file mode 100644 index 00000000000..bb26f48f13d --- /dev/null +++ b/clang/test/SemaObjCXX/ivar-lookup.mm @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +@interface Ivar +- (float*)method; +@end + +@interface A { + A *Ivar; +} +- (int*)method; +@end + +@implementation A +- (int*)method { + int *ip = [Ivar method]; // Okay; calls A's method on the instance variable Ivar. + // Note that Objective-C calls Ivar's method. + return 0; +} +@end |