Do we even need to conjure a new value here? reinterpret_cast on a location should be the same as static_cast or C-style casts, right? (At least when we're not dealing with fptr<->ptr conversions or different memory segments.)
Of course, I might be missing something. On May 25, 2012, at 12:02, Anna Zaks wrote: > Author: zaks > Date: Fri May 25 11:02:16 2012 > New Revision: 157478 > > URL: http://llvm.org/viewvc/llvm-project?rev=157478&view=rev > Log: > [analyzer] Don't crash on LValBitCast > > Modified: > cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp > cfe/trunk/test/Analysis/cxx11-crashes.cpp > > Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp?rev=157478&r1=157477&r2=157478&view=diff > ============================================================================== > --- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp (original) > +++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngineC.cpp Fri May 25 11:02:16 2012 > @@ -279,7 +279,6 @@ > case CK_Dependent: > case CK_ArrayToPointerDecay: > case CK_BitCast: > - case CK_LValueBitCast: > case CK_IntegralCast: > case CK_NullToPointer: > case CK_IntegralToPointer: > @@ -378,7 +377,8 @@ > case CK_UserDefinedConversion: > case CK_ConstructorConversion: > case CK_VectorSplat: > - case CK_MemberPointerToBoolean: { > + case CK_MemberPointerToBoolean: > + case CK_LValueBitCast: { > // Recover some path-sensitivty by conjuring a new value. > QualType resultType = CastE->getType(); > if (CastE->isGLValue()) > > Modified: cfe/trunk/test/Analysis/cxx11-crashes.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/cxx11-crashes.cpp?rev=157478&r1=157477&r2=157478&view=diff > ============================================================================== > --- cfe/trunk/test/Analysis/cxx11-crashes.cpp (original) > +++ cfe/trunk/test/Analysis/cxx11-crashes.cpp Fri May 25 11:02:16 2012 > @@ -57,3 +57,10 @@ > bool s[25]; > addressof(s); > } > + > +// radar://11487525 Don't crash on CK_LValueBitCast. > +bool begin(double *it) { > + typedef bool type[25]; > + bool *a = reinterpret_cast<type &>(*( reinterpret_cast<char *>( it ))); > + return *a; > +} > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
