Revert "InlineObjCInstanceMethod.m: Remove lines introduced in r165079."
authorJordan Rose <jordan_rose@apple.com>
Wed, 3 Oct 2012 16:00:32 +0000 (16:00 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 3 Oct 2012 16:00:32 +0000 (16:00 +0000)
...and fix the run line so that the expected warnings are the same on
all platforms.

This reverts r165088 / d09074f0ca06626914108f1c0d4e70adeb851e01.

llvm-svn: 165124

clang/test/Analysis/inlining/InlineObjCInstanceMethod.m

index 48556dc..21ce857 100644 (file)
@@ -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"
 
 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
+}