From: Jordan Rose Date: Thu, 25 Jul 2013 17:22:02 +0000 (+0000) Subject: [analyzer] Weaken assertion to account for pointer-to-integer casts. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0aaa57d19c23165d5e422c706084799d97eabe97;p=clang [analyzer] Weaken assertion to account for pointer-to-integer casts. PR16690 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187132 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/SValBuilder.cpp b/lib/StaticAnalyzer/Core/SValBuilder.cpp index 1992abbf4c..6df8a901f4 100644 --- a/lib/StaticAnalyzer/Core/SValBuilder.cpp +++ b/lib/StaticAnalyzer/Core/SValBuilder.cpp @@ -412,7 +412,7 @@ SVal SValBuilder::evalCast(SVal val, QualType castTy, QualType originalTy) { return makeNonLoc(Sym, BO_NE, BVF.getValue(0, Sym->getType()), castTy); } - assert(val.getAs()); + assert(val.getAs() || val.getAs()); return makeTruthVal(true, castTy); } diff --git a/test/Analysis/casts.m b/test/Analysis/casts.m index 1a78940eee..895c8119c1 100644 --- a/test/Analysis/casts.m +++ b/test/Analysis/casts.m @@ -1,9 +1,7 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify %s // expected-no-diagnostics -// Test function pointer casts. Currently we track function addresses using -// loc::FunctionVal. Because casts can be arbitrary, do we need to model -// functions with regions? +// Test function pointer casts. typedef void* (*MyFuncTest1)(void); MyFuncTest1 test1_aux(void); @@ -14,8 +12,7 @@ void test1(void) { if (p != ((void*) 0)) x = (*p)(); } -// Test casts from void* to function pointers. Same issue as above: -// should we eventually model function pointers using regions? +// Test casts from void* to function pointers. void* test2(void *p) { MyFuncTest1 fp = (MyFuncTest1) p; return (*fp)(); @@ -41,3 +38,9 @@ adium_media_ready_cb(RDR10087620 *InObj) { InObj.elem |= EEOne; } + + +// PR16690 +_Bool testLocAsIntegerToBool() { + return (long long)&testLocAsIntegerToBool; +}