[cfe-commits] r157478 - in /cfe/trunk: lib/StaticAnalyzer/Core/ExprEngineC.cpp test/Analysis/cxx11-crashes.cpp

Jordy Rose jediknil at belkadan.com
Fri May 25 09:39:54 PDT 2012


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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list