r339581 - [SEMA] add more -Wfloat-conversion to compound assigment analysis
Vitaly Buka via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 13 12:49:51 PDT 2018
Looks like this patch:
http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/13867/steps/ninja%20check%201/logs/stdio
FAIL: Clang :: Sema/conversion.c (12530 of 44133)
******************** TEST 'Clang :: Sema/conversion.c' FAILED
********************
Script:
--
: 'RUN: at line 1';
/home/buildbots/ppc64le-clang-lnt-test/clang-ppc64le-lnt/stage1/bin/clang
-cc1 -internal-isystem
/home/buildbots/ppc64le-clang-lnt-test/clang-ppc64le-lnt/stage1/lib/clang/8.0.0/include
-nostdsysteminc -fsyntax-only -verify -Wconversion -nostdsysteminc
-nobuiltininc -isystem
/home/buildbots/ppc64le-clang-lnt-test/clang-ppc64le-lnt/llvm/tools/clang/test/Sema/Inputs
-triple x86_64-apple-darwin
/home/buildbots/ppc64le-clang-lnt-test/clang-ppc64le-lnt/llvm/tools/clang/test/Sema/conversion.c
-Wno-unreachable-code
--
Exit Code: 1
Command Output (stderr):
--
error: 'warning' diagnostics seen but not expected:
File /home/buildbots/ppc64le-clang-lnt-test/clang-ppc64le-lnt/llvm/tools/clang/test/Sema/conversion.c
Line 362: implicit conversion turns floating-point number into
integer: 'char' to 'float'
1 error generated.
--
On Mon, Aug 13, 2018 at 9:46 AM Nick Desaulniers via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: nickdesaulniers
> Date: Mon Aug 13 09:38:07 2018
> New Revision: 339581
>
> URL: http://llvm.org/viewvc/llvm-project?rev=339581&view=rev
> Log:
> [SEMA] add more -Wfloat-conversion to compound assigment analysis
>
> Summary: Fixes Bug: https://bugs.llvm.org/show_bug.cgi?id=27061
>
> Reviewers: aaron.ballman, acoomans
>
> Reviewed By: aaron.ballman, acoomans
>
> Subscribers: acoomans, cfe-commits, srhines, pirama
>
> Differential Revision: https://reviews.llvm.org/D50467
>
> Modified:
> cfe/trunk/lib/Sema/SemaChecking.cpp
> cfe/trunk/test/SemaCXX/warn-float-conversion.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=339581&r1=339580&r2=339581&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Aug 13 09:38:07 2018
> @@ -10282,33 +10282,6 @@ static void DiagnoseImpCast(Sema &S, Exp
> DiagnoseImpCast(S, E, E->getType(), T, CContext, diag,
> pruneControlFlow);
> }
>
> -/// Analyze the given compound assignment for the possible losing of
> -/// floating-point precision.
> -static void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {
> - assert(isa<CompoundAssignOperator>(E) &&
> - "Must be compound assignment operation");
> - // Recurse on the LHS and RHS in here
> - AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());
> - AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());
> -
> - // Now check the outermost expression
> - const auto *ResultBT = E->getLHS()->getType()->getAs<BuiltinType>();
> - const auto *RBT = cast<CompoundAssignOperator>(E)
> - ->getComputationResultType()
> - ->getAs<BuiltinType>();
> -
> - // If both source and target are floating points.
> - if (ResultBT && ResultBT->isFloatingPoint() && RBT &&
> RBT->isFloatingPoint())
> - // Builtin FP kinds are ordered by increasing FP rank.
> - if (ResultBT->getKind() < RBT->getKind())
> - // We don't want to warn for system macro.
> - if (!S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))
> - // warn about dropping FP rank.
> - DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(),
> - E->getOperatorLoc(),
> - diag::warn_impcast_float_result_precision);
> -}
> -
> /// Diagnose an implicit cast from a floating point value to an integer
> value.
> static void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T,
> SourceLocation CContext) {
> @@ -10411,6 +10384,39 @@ static void DiagnoseFloatingImpCast(Sema
> }
> }
>
> +/// Analyze the given compound assignment for the possible losing of
> +/// floating-point precision.
> +static void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {
> + assert(isa<CompoundAssignOperator>(E) &&
> + "Must be compound assignment operation");
> + // Recurse on the LHS and RHS in here
> + AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());
> + AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());
> +
> + // Now check the outermost expression
> + const auto *ResultBT = E->getLHS()->getType()->getAs<BuiltinType>();
> + const auto *RBT = cast<CompoundAssignOperator>(E)
> + ->getComputationResultType()
> + ->getAs<BuiltinType>();
> +
> + // The below checks assume source is floating point.
> + if (!ResultBT || !RBT || !RBT->isFloatingPoint()) return;
> +
> + // If source is floating point but target is not.
> + if (!ResultBT->isFloatingPoint())
> + return DiagnoseFloatingImpCast(S, E, E->getRHS()->getType(),
> + E->getExprLoc());
> +
> + // If both source and target are floating points.
> + // Builtin FP kinds are ordered by increasing FP rank.
> + if (ResultBT->getKind() < RBT->getKind() &&
> + // We don't want to warn for system macro.
> + !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))
> + // warn about dropping FP rank.
> + DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(),
> E->getOperatorLoc(),
> + diag::warn_impcast_float_result_precision);
> +}
> +
> static std::string PrettyPrintInRange(const llvm::APSInt &Value,
> IntRange Range) {
> if (!Range.Width) return "0";
>
> Modified: cfe/trunk/test/SemaCXX/warn-float-conversion.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-float-conversion.cpp?rev=339581&r1=339580&r2=339581&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/warn-float-conversion.cpp (original)
> +++ cfe/trunk/test/SemaCXX/warn-float-conversion.cpp Mon Aug 13 09:38:07
> 2018
> @@ -41,6 +41,32 @@ void Convert(float f, double d, long dou
> l = ld; //expected-warning{{conversion}}
> }
>
> +void CompoundAssignment() {
> + int x = 3;
> +
> + x += 1.234; //expected-warning{{conversion}}
> + x -= -0.0; //expected-warning{{conversion}}
> + x *= 1.1f; //expected-warning{{conversion}}
> + x /= -2.2f; //expected-warning{{conversion}}
> +
> + int y = x += 1.4f; //expected-warning{{conversion}}
> +
> + float z = 1.1f;
> + double w = -2.2;
> +
> + y += z + w; //expected-warning{{conversion}}
> +}
> +
> +# 1 "foo.h" 3
> +// ^ the following text comes from a system header file.
> +#define SYSTEM_MACRO_FLOAT(x) do { (x) += 1.1; } while(0)
> +# 1 "warn-float-conversion.cpp" 1
> +// ^ start of a new file.
> +void SystemMacro() {
> + float x = 0.0f;
> + SYSTEM_MACRO_FLOAT(x);
> +}
> +
> void Test() {
> int a1 = 10.0/2.0; //expected-warning{{conversion}}
> int a2 = 1.0/2.0; //expected-warning{{conversion}}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180813/1bbe89fa/attachment.html>
More information about the cfe-commits
mailing list