summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp49
1 files changed, 0 insertions, 49 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 2b0d8c903b4..f9f82cdeef4 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -11400,55 +11400,6 @@ CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC,
}
}
- // If we are casting an integer type to a floating point type, we might
- // lose accuracy if the floating point type has a narrower significand
- // than the integer type. Issue warnings for that accuracy loss.
- if (SourceBT && TargetBT && SourceBT->isIntegerType() &&
- TargetBT->isFloatingType()) {
- // Determine the number of precision bits in the source integer type.
- IntRange SourceRange = GetExprRange(S.Context, E, S.isConstantEvaluated());
- unsigned int SourcePrecision = SourceRange.Width;
-
- // Determine the number of precision bits in the
- // target floating point type.
- unsigned int TargetPrecision = llvm::APFloatBase::semanticsPrecision(
- S.Context.getFloatTypeSemantics(QualType(TargetBT, 0)));
-
- if (SourcePrecision > 0 && TargetPrecision > 0 &&
- SourcePrecision > TargetPrecision) {
-
- llvm::APSInt SourceInt;
- if (E->isIntegerConstantExpr(SourceInt, S.Context)) {
- // If the source integer is a constant, convert it to the target
- // floating point type. Issue a warning if the value changes
- // during the whole conversion.
- llvm::APFloat TargetFloatValue(
- S.Context.getFloatTypeSemantics(QualType(TargetBT, 0)));
- llvm::APFloat::opStatus ConversionStatus =
- TargetFloatValue.convertFromAPInt(SourceInt,
- SourceBT->isSignedInteger(), llvm::APFloat::rmNearestTiesToEven);
-
- if (ConversionStatus != llvm::APFloat::opOK) {
- std::string PrettySourceValue = SourceInt.toString(10);
- SmallString<32> PrettyTargetValue;
- TargetFloatValue.toString(PrettyTargetValue,
- TargetPrecision);
-
- S.DiagRuntimeBehavior(
- E->getExprLoc(), E,
- S.PDiag(diag::warn_impcast_integer_float_precision_constant)
- << PrettySourceValue << PrettyTargetValue
- << E->getType() << T
- << E->getSourceRange() << clang::SourceRange(CC));
- }
- } else {
- // Otherwise, the implicit conversion may lose precision.
- DiagnoseImpCast(S, E, T, CC,
- diag::warn_impcast_integer_float_precision);
- }
- }
- }
-
DiagnoseNullConversion(S, E, T, CC);
S.DiscardMisalignedMemberAddress(Target, E);
OpenPOWER on IntegriCloud