]> granicus.if.org Git - clang/commitdiff
Fix bug 10797: Crash: "cast<Ty>() argument of incompatible type!" assert when analyzi...
authorAnna Zaks <ganna@apple.com>
Mon, 29 Aug 2011 20:05:54 +0000 (20:05 +0000)
committerAnna Zaks <ganna@apple.com>
Mon, 29 Aug 2011 20:05:54 +0000 (20:05 +0000)
Patch by Jean-Daniel Dupas. Thanks for spotting and fixing!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138757 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
test/Analysis/keychainAPI.m

index 40c9c72dc2a2db89cc711d71590502c866c328ff..1c9390217f79aeaf31203b42522dee431304a036 100644 (file)
@@ -201,9 +201,11 @@ static SymbolRef getSymbolForRegion(CheckerContext &C,
   if (!isa<SymbolicRegion>(R)) {
     // Implicit casts (ex: void* -> char*) can turn Symbolic region into element
     // region, if that is the case, get the underlining region.
-    if (const ElementRegion *ER = dyn_cast<ElementRegion>(R))
+    if (const ElementRegion *ER = dyn_cast<ElementRegion>(R)) {
       R = ER->getAsArrayOffset().getRegion();
-    else
+      if (!isa<SymbolicRegion>(R))
+        return 0;
+    } else
       return 0;
   }
   return cast<SymbolicRegion>(R)->getSymbol();
index 69b36e811a58b6296500e051f887643cecce7208..1969a9d169cf95ff3989778a2d10fb0ee31750b6 100644 (file)
@@ -304,3 +304,9 @@ void DellocWithCFStringCreate4(CFAllocatorRef alloc) {
     CFRelease(userStr);
   }
 }
+
+//Example from bug 10797.
+__inline__ static
+const char *__WBASLLevelString(int level) {
+  return "foo";
+}