From: Argyrios Kyrtzidis Date: Tue, 18 Jan 2011 18:49:33 +0000 (+0000) Subject: Properly do a float -> _Complex double conversion, fixes rdar://8875946. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e188933adf2cfe2821b8acba2de6d5d152bc246b;p=clang Properly do a float -> _Complex double conversion, fixes rdar://8875946. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123759 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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(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; +}