r354074 - [Sema] Fix-up a -Wfloat-conversion diagnostic

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 15 05:54:24 PST 2019


Merged in r354129. Please let me know if there are any follow-ups.

Thanks,
Hans

On Fri, Feb 15, 2019 at 12:16 AM Erik Pilkington
<erik.pilkington at gmail.com> wrote:
>
> 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