summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2016-11-14 12:19:18 +0000
committerRenato Golin <renato.golin@linaro.org>2016-11-14 12:19:18 +0000
commit6a051ba61498863fa41d4a85db8c18fa5e5f032a (patch)
tree6b093deededd3cba930d97fd60d04f582497aedf /clang/lib/Sema/SemaExpr.cpp
parent475b40dab8c477bdb190f201e1dea8abd9e21499 (diff)
downloadbcm5719-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.cpp29
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();
}
OpenPOWER on IntegriCloud