summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-11-12 03:56:23 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-11-12 03:56:23 +0000
commit47133bed4af66c31bc124b12e822276d3e0405fb (patch)
tree3b3b09fc4fa9471d8f2737ca5cd308b530fe364f
parentd48ab845563c06f12278cfb66148bd350e9814dc (diff)
downloadbcm5719-llvm-47133bed4af66c31bc124b12e822276d3e0405fb.tar.gz
bcm5719-llvm-47133bed4af66c31bc124b12e822276d3e0405fb.zip
Add missing casts to AST.
llvm-svn: 144455
-rw-r--r--clang/lib/Sema/SemaExpr.cpp9
-rw-r--r--clang/test/Sema/const-eval.c3
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index a5b766ad73b..d22a431d065 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -823,14 +823,21 @@ static QualType handleComplexIntConversion(Sema &S, ExprResult &LHS,
if (LHSComplexInt) {
// int -> _Complex int
+ // FIXME: This needs to take integer ranks into account
+ RHS = S.ImpCastExprToType(RHS.take(), LHSComplexInt->getElementType(),
+ CK_IntegralCast);
RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralRealToComplex);
return LHSType;
}
assert(RHSComplexInt);
// int -> _Complex int
- if (!IsCompAssign)
+ // FIXME: This needs to take integer ranks into account
+ if (!IsCompAssign) {
+ LHS = S.ImpCastExprToType(LHS.take(), RHSComplexInt->getElementType(),
+ CK_IntegralCast);
LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralRealToComplex);
+ }
return RHSType;
}
diff --git a/clang/test/Sema/const-eval.c b/clang/test/Sema/const-eval.c
index b188578420a..632457da091 100644
--- a/clang/test/Sema/const-eval.c
+++ b/clang/test/Sema/const-eval.c
@@ -81,6 +81,9 @@ EVAL_EXPR(38, __builtin_expect(1,1) == 1 ? 1 : -1)
EVAL_EXPR(39, __real__(1.f) == 1 ? 1 : -1)
EVAL_EXPR(40, __imag__(1.f) == 0 ? 1 : -1)
+// From gcc testsuite
+EVAL_EXPR(41, (int)(1+(_Complex unsigned)2))
+
// rdar://8875946
void rdar8875946() {
double _Complex P;
OpenPOWER on IntegriCloud