summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-12-13 04:47:15 +0000
committerTed Kremenek <kremenek@apple.com>2007-12-13 04:47:15 +0000
commit78dcda605909a23c55c1498c71591f068c4cd82f (patch)
tree0bd592be8333e6207cef9110a647fce24af09229
parent37c36ed79a67ccb7fcc937533a38deca36b5a071 (diff)
downloadbcm5719-llvm-78dcda605909a23c55c1498c71591f068c4cd82f.tar.gz
bcm5719-llvm-78dcda605909a23c55c1498c71591f068c4cd82f.zip
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) llvm-svn: 44982
-rw-r--r--clang/Analysis/LiveVariables.cpp1
-rw-r--r--clang/Analysis/UninitializedValues.cpp16
2 files changed, 14 insertions, 3 deletions
diff --git a/clang/Analysis/LiveVariables.cpp b/clang/Analysis/LiveVariables.cpp
index eba1a77941f..a9322f2d905 100644
--- a/clang/Analysis/LiveVariables.cpp
+++ b/clang/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/clang/Analysis/UninitializedValues.cpp b/clang/Analysis/UninitializedValues.cpp
index aec31972796..9651814b02d 100644
--- a/clang/Analysis/UninitializedValues.cpp
+++ b/clang/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());
}
OpenPOWER on IntegriCloud