r354074 - [Sema] Fix-up a -Wfloat-conversion diagnostic
Erik Pilkington via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 14 15:15:58 PST 2019
Hans, can you merge this diagnostic regression fix into LLVM 8?
Thanks!
> On Feb 14, 2019, at 2:48 PM, Erik Pilkington via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>
> Author: epilk
> Date: Thu Feb 14 14:48:01 2019
> New Revision: 354074
>
> URL: http://llvm.org/viewvc/llvm-project?rev=354074&view=rev
> Log:
> [Sema] Fix-up a -Wfloat-conversion diagnostic
>
> We were warning on valid ObjC property reference exprs, and passing
> in the wrong arguments to DiagnoseFloatingImpCast (leading to a badly
> worded diagnostic).
>
> rdar://47644670
>
> Differential revision: https://reviews.llvm.org/D58145
>
> Modified:
> cfe/trunk/lib/Sema/SemaChecking.cpp
> cfe/trunk/test/SemaCXX/warn-float-conversion.cpp
> cfe/trunk/test/SemaObjC/conversion.m
>
> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=354074&r1=354073&r2=354074&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu Feb 14 14:48:01 2019
> @@ -10624,16 +10624,16 @@ static void AnalyzeCompoundAssignment(Se
> // 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()))
> + // If source is floating point but target is an integer.
> + if (ResultBT->isInteger())
> + DiagnoseImpCast(S, E, E->getRHS()->getType(), E->getLHS()->getType(),
> + E->getExprLoc(), diag::warn_impcast_float_integer);
> + // If both source and target are floating points. Builtin FP kinds are ordered
> + // by increasing FP rank. FIXME: except _Float16, we currently emit a bogus
> + // warning.
> + else if (ResultBT->isFloatingPoint() && 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);
>
> 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=354074&r1=354073&r2=354074&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/warn-float-conversion.cpp (original)
> +++ cfe/trunk/test/SemaCXX/warn-float-conversion.cpp Thu Feb 14 14:48:01 2019
> @@ -44,17 +44,17 @@ void Convert(float f, double d, long dou
> 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}}
> + x += 1.234; // expected-warning {{implicit conversion turns floating-point number into integer: 'double' to 'int'}}
> + x -= -0.0; // expected-warning {{implicit conversion turns floating-point number into integer: 'double' to 'int'}}
> + x *= 1.1f; // expected-warning {{implicit conversion turns floating-point number into integer: 'float' to 'int'}}
> + x /= -2.2f; // expected-warning {{implicit conversion turns floating-point number into integer: 'float' to 'int'}}
>
> - int y = x += 1.4f; //expected-warning{{conversion}}
> + int y = x += 1.4f; // expected-warning {{implicit conversion turns floating-point number into integer: 'float' to 'int'}}
>
> float z = 1.1f;
> double w = -2.2;
>
> - y += z + w; //expected-warning{{conversion}}
> + y += z + w; // expected-warning {{implicit conversion turns floating-point number into integer: 'double' to 'int'}}
> }
>
> # 1 "foo.h" 3
>
> Modified: cfe/trunk/test/SemaObjC/conversion.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/conversion.m?rev=354074&r1=354073&r2=354074&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjC/conversion.m (original)
> +++ cfe/trunk/test/SemaObjC/conversion.m Thu Feb 14 14:48:01 2019
> @@ -14,4 +14,11 @@ void radar14415662(RDar14415662 *f, char
> x = y; // expected-warning {{implicit conversion loses integer precision: 'int' to 'char'}}
> }
>
> +__attribute__((objc_root_class)) @interface DoubleProp
> + at property double d;
> + at end
>
> +void use_double_prop(DoubleProp *dp) {
> + double local = 42;
> + dp.d += local; // no warning
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list