]> granicus.if.org Git - clang/commitdiff
[analyzer] Fix crash when analyzing C++ code.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sat, 19 Feb 2011 01:08:41 +0000 (01:08 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Sat, 19 Feb 2011 01:08:41 +0000 (01:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126007 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/Environment.cpp
test/Analysis/cxx-crashes.cpp

index a0a93c68a3bcddfdd445bf48287f1837b1a033cc..33f1945ce759042496a8804842ec654db66b7a99 100644 (file)
@@ -56,6 +56,7 @@ SVal Environment::getSVal(const Stmt *E, SValBuilder& svalBuilder) const {
           return svalBuilder.makeIntVal(cast<IntegerLiteral>(E));
       }
       case Stmt::ImplicitCastExprClass:
+      case Stmt::CXXFunctionalCastExprClass:
       case Stmt::CStyleCastExprClass: {
         // We blast through no-op casts to get the descendant
         // subexpression that has a value.
@@ -75,9 +76,6 @@ SVal Environment::getSVal(const Stmt *E, SValBuilder& svalBuilder) const {
       case Stmt::CXXBindTemporaryExprClass:
         E = cast<CXXBindTemporaryExpr>(E)->getSubExpr();
         continue;
-      case Stmt::CXXFunctionalCastExprClass:
-        E = cast<CXXFunctionalCastExpr>(E)->getSubExpr();
-        continue;        
       // Handle all other Stmt* using a lookup.
       default:
         break;
index db2298df8917ab39da667afcd417197297f570e0..c15eea862e7a254a39b86feeecb9b426fc606acf 100644 (file)
@@ -6,6 +6,10 @@ int f1(char *dst) {
   return !(q >= p);
 }
 
+long f2(char *c) {
+  return long(c) & 1;
+}
+
 namespace {
 
 struct A { };