From 8d9ebae7ba382d3151e4a7d336578d9b92f73c3c Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 13 Dec 2007 04:47:15 +0000 Subject: [PATCH] Fixed bug in live-variable analysis and uninitialized-values analysis where 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 | 1 + Analysis/UninitializedValues.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Analysis/LiveVariables.cpp b/Analysis/LiveVariables.cpp index eba1a77941..a9322f2d90 100644 --- a/Analysis/LiveVariables.cpp +++ b/Analysis/LiveVariables.cpp @@ -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: diff --git a/Analysis/UninitializedValues.cpp b/Analysis/UninitializedValues.cpp index aec3197279..9651814b02 100644 --- a/Analysis/UninitializedValues.cpp +++ b/Analysis/UninitializedValues.cpp @@ -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()); } -- 2.50.1