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.pilking...@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@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 > > +@property double d; > > +@end > > > > +void use_double_prop(DoubleProp *dp) { > > + double local = 42; > > + dp.d += local; // no warning > > +} > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits