diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h index 9ba2f8c21aa6..953527da34a1 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h @@ -102,7 +102,7 @@ public: /// Returns true if the predecessor is within an inlined function/method. bool isWithinInlined() { - return (getStackFrame() != 0); + return (getStackFrame()->getParent() != 0); } BugReporter &getBugReporter() { diff --git a/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp b/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp index e5fbb832a92e..cfb35a4e5f91 100644 --- a/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp @@ -736,9 +736,9 @@ ProgramStateRef assumeExprIsNonNull(const Expr *NonNullExpr, ProgramStateRef State, CheckerContext &C) { SVal Val = State->getSVal(NonNullExpr, C.getLocationContext()); - if (!isa(Val)) - return State; - return State->assume(cast(Val), true); + if (DefinedOrUnknownSVal *DV = dyn_cast(&Val)) + return State->assume(cast(*DV), true); + return State; } void ObjCNonNilReturnValueChecker::checkPostObjCMessage(const ObjCMethodCall &M, diff --git a/clang/test/Analysis/inlining/assume-super-init-does-not-return-nil.m b/clang/test/Analysis/inlining/assume-super-init-does-not-return-nil.m index d17835e1fa63..cda1e87918e6 100644 --- a/clang/test/Analysis/inlining/assume-super-init-does-not-return-nil.m +++ b/clang/test/Analysis/inlining/assume-super-init-does-not-return-nil.m @@ -24,7 +24,7 @@ typedef signed char BOOL; @implementation Cell - (id) init { if ((self = [super init])) { - ; + return self; } // Test that this is being analyzed. int m;