]> granicus.if.org Git - clang/commitdiff
Fixed bug in live-variable analysis and uninitialized-values analysis where
authorTed Kremenek <kremenek@apple.com>
Thu, 13 Dec 2007 04:47:15 +0000 (04:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 13 Dec 2007 04:47:15 +0000 (04:47 +0000)
we incorrectly examine the expression within a sizeof() for use in computing
dataflow values.

This fixes: PR 1858 (http://llvm.org/bugs/show_bug.cgi?id=1858)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44982 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/LiveVariables.cpp
Analysis/UninitializedValues.cpp

index eba1a77941f5244ef1683f49cbe2ab25545765c5..a9322f2d90524de7f9354a0914c83f8c69562b22 100644 (file)
@@ -93,6 +93,7 @@ void TransferFuncs::VisitUnaryOperator(UnaryOperator* U) {
   Stmt *S = U->getSubExpr();
   
   switch (U->getOpcode()) {
+  case UnaryOperator::SizeOf: return;      
   case UnaryOperator::PostInc:
   case UnaryOperator::PostDec:
   case UnaryOperator::PreInc:
index aec319727967c51954279a560373fd236b511436..9651814b02d50be2a722ecd81d11091c583d63db 100644 (file)
@@ -136,9 +136,19 @@ bool TransferFuncs::VisitCallExpr(CallExpr* C) {
 }
 
 bool TransferFuncs::VisitUnaryOperator(UnaryOperator* U) {
-  if (U->getOpcode() == UnaryOperator::AddrOf)
-    if (BlockVarDecl* VD = FindBlockVarDecl(U->getSubExpr()))
-      return V(VD,AD) = Initialized;
+  switch (U->getOpcode()) {
+    case UnaryOperator::AddrOf:
+      if (BlockVarDecl* VD = FindBlockVarDecl(U->getSubExpr()))
+        return V(VD,AD) = Initialized;
+      
+      break;
+    
+    case UnaryOperator::SizeOf:
+      return Initialized;
+      
+    default:
+      break;
+  }
 
   return Visit(U->getSubExpr());
 }