diff options
author | Renato Golin <renato.golin@linaro.org> | 2016-11-14 12:19:18 +0000 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2016-11-14 12:19:18 +0000 |
commit | 6a051ba61498863fa41d4a85db8c18fa5e5f032a (patch) | |
tree | 6b093deededd3cba930d97fd60d04f582497aedf /clang/lib/Sema/SemaExpr.cpp | |
parent | 475b40dab8c477bdb190f201e1dea8abd9e21499 (diff) | |
download | bcm5719-llvm-6a051ba61498863fa41d4a85db8c18fa5e5f032a.tar.gz bcm5719-llvm-6a051ba61498863fa41d4a85db8c18fa5e5f032a.zip |
Revert "Improve handling of floating point literals in OpenCL to only use double precision if the target supports fp64."
This reverts commit r286815, as it broke all ARM and AArch64 bots.
llvm-svn: 286818
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 61c9f26ab6a..fae8bf0f548 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -705,13 +705,9 @@ ExprResult Sema::DefaultLvalueConversion(Expr *E) { if (getLangOpts().ObjCAutoRefCount && E->getType().getObjCLifetime() == Qualifiers::OCL_Weak) Cleanup.setExprNeedsCleanups(true); - - ExprResult Res = E; - if ( T != E->getType()) { - Res = ImplicitCastExpr::Create(Context, T, CK_LValueToRValue, E, - nullptr, VK_RValue); - } + ExprResult Res = ImplicitCastExpr::Create(Context, T, CK_LValueToRValue, E, + nullptr, VK_RValue); // C11 6.3.2.1p2: // ... if the lvalue has atomic type, the value has the non-atomic version @@ -821,16 +817,8 @@ ExprResult Sema::DefaultArgumentPromotion(Expr *E) { // double. const BuiltinType *BTy = Ty->getAs<BuiltinType>(); if (BTy && (BTy->getKind() == BuiltinType::Half || - BTy->getKind() == BuiltinType::Float)) { - if (getLangOpts().OpenCL && - !(getOpenCLOptions().cl_khr_fp64)) { - if (BTy->getKind() == BuiltinType::Half) { - E = ImpCastExprToType(E, Context.FloatTy, CK_FloatingCast).get(); - } - } else { - E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).get(); - } - } + BTy->getKind() == BuiltinType::Float)) + E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).get(); // C++ performs lvalue-to-rvalue conversion as a default argument // promotion, even on class types, but note: @@ -3409,13 +3397,10 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) { if (Ty == Context.DoubleTy) { if (getLangOpts().SinglePrecisionConstants) { - const BuiltinType *BTy = Ty->getAs<BuiltinType>(); - if (BTy->getKind() != BuiltinType::Float) { - Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).get(); - } + Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).get(); } else if (getLangOpts().OpenCL && - !(getOpenCLOptions().cl_khr_fp64)) { - // Impose single-precision float type when cl_khr_fp64 is not enabled. + !((getLangOpts().OpenCLVersion >= 120) || + getOpenCLOptions().cl_khr_fp64)) { Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64); Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).get(); } |