summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-07-17 01:28:55 +0000
committerTed Kremenek <kremenek@apple.com>2010-07-17 01:28:55 +0000
commitb32964d02da9f90da59ed126bad6d9401c0b400a (patch)
treea63fb19c0143a757eb009692874317974eeb2bf3 /clang
parentadc81f8ee8c41be9a104387139dc0e6660a097d1 (diff)
downloadbcm5719-llvm-b32964d02da9f90da59ed126bad6d9401c0b400a.tar.gz
bcm5719-llvm-b32964d02da9f90da59ed126bad6d9401c0b400a.zip
Fix '<rdar://problem/8202272> __imag passed non-complex should not crash' by removing a bogus assertion.
llvm-svn: 108602
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Checker/GRExprEngine.cpp3
-rw-r--r--clang/test/Analysis/misc-ps.m6
2 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Checker/GRExprEngine.cpp b/clang/lib/Checker/GRExprEngine.cpp
index 1424820f3b8..26b5801068f 100644
--- a/clang/lib/Checker/GRExprEngine.cpp
+++ b/clang/lib/Checker/GRExprEngine.cpp
@@ -2835,8 +2835,7 @@ void GRExprEngine::VisitUnaryOperator(UnaryOperator* U, ExplodedNode* Pred,
continue;
}
- // For all other types, UnaryOperator::Float returns 0.
- assert (Ex->getType()->isIntegerType());
+ // For all other types, UnaryOperator::Imag returns 0.
const GRState* state = GetState(*I);
SVal X = ValMgr.makeZeroVal(Ex->getType());
MakeNode(Dst, U, *I, state->BindExpr(U, X));
diff --git a/clang/test/Analysis/misc-ps.m b/clang/test/Analysis/misc-ps.m
index 7de1305049b..c2099b04a95 100644
--- a/clang/test/Analysis/misc-ps.m
+++ b/clang/test/Analysis/misc-ps.m
@@ -1020,3 +1020,9 @@ void pr7475_warn() {
*someStatic = 0; // expected-warning{{null pointer}}
}
+// <rdar://problem/8202272> - __imag passed non-complex should not crash
+float f0(_Complex float x) {
+ float l0 = __real x;
+ return __real l0 + __imag l0;
+}
+
OpenPOWER on IntegriCloud