aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaExpr.cpp3
-rw-r--r--test/Sema/const-eval.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 45e0c3377b..e2e802c790 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -528,7 +528,8 @@ QualType Sema::UsualArithmeticConversions(Expr *&lhsExpr, Expr *&rhsExpr,
if (order < 0) { // RHS is wider
// float -> _Complex double
if (!isCompAssign) {
- ImpCastExprToType(lhsExpr, rhs, CK_FloatingCast);
+ QualType fp = cast<ComplexType>(rhs)->getElementType();
+ ImpCastExprToType(lhsExpr, fp, CK_FloatingCast);
ImpCastExprToType(lhsExpr, rhs, CK_FloatingRealToComplex);
}
return rhs;
diff --git a/test/Sema/const-eval.c b/test/Sema/const-eval.c
index 9f2d32769f..aa0cee5da5 100644
--- a/test/Sema/const-eval.c
+++ b/test/Sema/const-eval.c
@@ -80,3 +80,9 @@ EVAL_EXPR(38, __builtin_expect(1,1) == 1 ? 1 : -1)
// PR7884
EVAL_EXPR(39, __real__(1.f) == 1 ? 1 : -1)
EVAL_EXPR(40, __imag__(1.f) == 0 ? 1 : -1)
+
+// rdar://8875946
+void rdar8875946() {
+ double _Complex P;
+ float _Complex P2 = 3.3f + P;
+}