]> granicus.if.org Git - clang/commitdiff
[analyzer] Fix a new failure encountered while building Adium exposed as a result...
authorAnna Zaks <ganna@apple.com>
Mon, 12 Sep 2011 17:56:08 +0000 (17:56 +0000)
committerAnna Zaks <ganna@apple.com>
Mon, 12 Sep 2011 17:56:08 +0000 (17:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139507 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/SValBuilder.cpp
test/Analysis/casts.m

index e17f0bee20dc532c3016e18c08bbd1973725fafd..ebf7ae2fd4b1aba4f96c48b626e6a0c7fffc3cf1 100644 (file)
@@ -213,8 +213,13 @@ SVal SValBuilder::evalCast(SVal val, QualType castTy, QualType originalTy) {
     return UnknownVal();
   
   // Check for casts from integers to integers.
-  if (castTy->isIntegerType() && originalTy->isIntegerType())
-    return evalCastFromNonLoc(cast<NonLoc>(val), castTy);
+  if (castTy->isIntegerType() && originalTy->isIntegerType()) {
+    if (isa<Loc>(val))
+      // This can be a cast to ObjC property of type int.
+      return evalCastFromLoc(cast<Loc>(val), castTy);
+    else
+      return evalCastFromNonLoc(cast<NonLoc>(val), castTy);
+  }
 
   // Check for casts from pointers to integers.
   if (castTy->isIntegerType() && Loc::isLocType(originalTy))
index b19ead4b058a68029b40087f884054cade21c02f..c4edc044b82e6b45028b9ee63de49bc5c44da9f3 100644 (file)
@@ -19,3 +19,23 @@ void* test2(void *p) {
   MyFuncTest1 fp = (MyFuncTest1) p;
   return (*fp)();
 }
+
+// <radar://10087620>
+// A cast from int onjective C property reference to int.
+typedef signed char BOOL;
+@protocol NSObject  - (BOOL)isEqual:(id)object; @end
+@interface NSObject <NSObject> {} - (id)init; @end
+typedef enum {
+  AIMediaTypeAudio,
+  AIMediaTypeVideo
+} AIMediaType;
+@interface AIMedia : NSObject {
+  AIMediaType   mediaType;
+}
+@property (readwrite, nonatomic) AIMediaType mediaType;
+static void
+adium_media_ready_cb(AIMedia *adiumMedia, const char *sid)
+{
+  adiumMedia.mediaType |= AIMediaTypeVideo;
+}
+@end
\ No newline at end of file