From: Jordan Rose Date: Wed, 3 Oct 2012 16:00:32 +0000 (+0000) Subject: Revert "InlineObjCInstanceMethod.m: Remove lines introduced in r165079." X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ff63227817217cd33c587e054d4892285b8e00c6;p=clang Revert "InlineObjCInstanceMethod.m: Remove lines introduced in r165079." ...and fix the run line so that the expected warnings are the same on all platforms. This reverts r165088 / d09074f0ca06626914108f1c0d4e70adeb851e01. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165124 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Analysis/inlining/InlineObjCInstanceMethod.m b/test/Analysis/inlining/InlineObjCInstanceMethod.m index 48556dcd49..21ce8576a4 100644 --- a/test/Analysis/inlining/InlineObjCInstanceMethod.m +++ b/test/Analysis/inlining/InlineObjCInstanceMethod.m @@ -1,4 +1,4 @@ -// RUN: %clang --analyze -Xanalyzer -analyzer-checker=core -Xclang -verify %s +// RUN: %clang --analyze -Xanalyzer -analyzer-checker=osx.cocoa.IncompatibleMethodTypes -Xclang -verify %s #include "InlineObjCInstanceMethod.h" @@ -84,3 +84,28 @@ void randomlyMessageAnObject(MyClass *arr[], int i) { (void)[arr[i] getInt]; } + + +@interface EvilChild : MyParent +- (id)getInt; +@end + +@implementation EvilChild +- (id)getInt { // expected-warning {{types are incompatible}} + return self; +} +@end + +int testNonCovariantReturnType() { + MyParent *obj = [[EvilChild alloc] init]; + + // Devirtualization allows us to directly call -[EvilChild getInt], but + // that returns an id, not an int. There is an off-by-default warning for + // this, -Woverriding-method-mismatch, and an on-by-default analyzer warning, + // osx.cocoa.IncompatibleMethodTypes. This code would probably crash at + // runtime, but at least the analyzer shouldn't crash. + int x = 1 + [obj getInt]; + + [obj release]; + return 5/(x-1); // no-warning +}