<div dir="ltr"><pre><span class="gmail-m_4465281322027255558gmail-stdout"><font color="#000000" face="Courier New, courier, monotype, monospace" size="3">Looks like this patch:</font></span></pre><pre><span class="gmail-m_4465281322027255558gmail-stdout"><font color="#000000" face="Courier New, courier, monotype, monospace" size="3"><a href="http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/13867/steps/ninja%20check%201/logs/stdio" target="_blank" class="gmail-cremed cremed">http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/13867/steps/ninja%20check%201/logs/stdio</a><br></font></span></pre><pre><span class="gmail-m_4465281322027255558gmail-stdout"><font color="#000000" face="Courier New, courier, monotype, monospace" size="3"><br></font></span></pre><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="gmail-m_4465281322027255558gmail-stdout">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.

--</span></pre></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Aug 13, 2018 at 9:46 AM Nick Desaulniers via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nickdesaulniers<br>
Date: Mon Aug 13 09:38:07 2018<br>
New Revision: 339581<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=339581&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=339581&view=rev</a><br>
Log:<br>
[SEMA] add more -Wfloat-conversion to compound assigment analysis<br>
<br>
Summary: Fixes Bug: <a href="https://bugs.llvm.org/show_bug.cgi?id=27061" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=27061</a><br>
<br>
Reviewers: aaron.ballman, acoomans<br>
<br>
Reviewed By: aaron.ballman, acoomans<br>
<br>
Subscribers: acoomans, cfe-commits, srhines, pirama<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D50467" rel="noreferrer" target="_blank">https://reviews.llvm.org/D50467</a><br>
<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaChecking.cpp<br>
    cfe/trunk/test/SemaCXX/warn-float-conversion.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=339581&r1=339580&r2=339581&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=339581&r1=339580&r2=339581&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Aug 13 09:38:07 2018<br>
@@ -10282,33 +10282,6 @@ static void DiagnoseImpCast(Sema &S, Exp<br>
   DiagnoseImpCast(S, E, E->getType(), T, CContext, diag, pruneControlFlow);<br>
 }<br>
<br>
-/// Analyze the given compound assignment for the possible losing of<br>
-/// floating-point precision.<br>
-static void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {<br>
-  assert(isa<CompoundAssignOperator>(E) &&<br>
-         "Must be compound assignment operation");<br>
-  // Recurse on the LHS and RHS in here<br>
-  AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());<br>
-  AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());<br>
-<br>
-  // Now check the outermost expression<br>
-  const auto *ResultBT = E->getLHS()->getType()->getAs<BuiltinType>();<br>
-  const auto *RBT = cast<CompoundAssignOperator>(E)<br>
-                        ->getComputationResultType()<br>
-                        ->getAs<BuiltinType>();<br>
-<br>
-  // If both source and target are floating points.<br>
-  if (ResultBT && ResultBT->isFloatingPoint() && RBT && RBT->isFloatingPoint())<br>
-    // Builtin FP kinds are ordered by increasing FP rank.<br>
-    if (ResultBT->getKind() < RBT->getKind())<br>
-      // We don't want to warn for system macro.<br>
-      if (!S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))<br>
-        // warn about dropping FP rank.<br>
-        DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(),<br>
-                        E->getOperatorLoc(),<br>
-                        diag::warn_impcast_float_result_precision);<br>
-}<br>
-<br>
 /// Diagnose an implicit cast from a floating point value to an integer value.<br>
 static void DiagnoseFloatingImpCast(Sema &S, Expr *E, QualType T,<br>
                                     SourceLocation CContext) {<br>
@@ -10411,6 +10384,39 @@ static void DiagnoseFloatingImpCast(Sema<br>
   }<br>
 }<br>
<br>
+/// Analyze the given compound assignment for the possible losing of<br>
+/// floating-point precision.<br>
+static void AnalyzeCompoundAssignment(Sema &S, BinaryOperator *E) {<br>
+  assert(isa<CompoundAssignOperator>(E) &&<br>
+         "Must be compound assignment operation");<br>
+  // Recurse on the LHS and RHS in here<br>
+  AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());<br>
+  AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());<br>
+<br>
+  // Now check the outermost expression<br>
+  const auto *ResultBT = E->getLHS()->getType()->getAs<BuiltinType>();<br>
+  const auto *RBT = cast<CompoundAssignOperator>(E)<br>
+                        ->getComputationResultType()<br>
+                        ->getAs<BuiltinType>();<br>
+<br>
+  // The below checks assume source is floating point.<br>
+  if (!ResultBT || !RBT || !RBT->isFloatingPoint()) return;<br>
+<br>
+  // If source is floating point but target is not.<br>
+  if (!ResultBT->isFloatingPoint())<br>
+    return DiagnoseFloatingImpCast(S, E, E->getRHS()->getType(),<br>
+                                   E->getExprLoc());<br>
+<br>
+  // If both source and target are floating points.<br>
+  // Builtin FP kinds are ordered by increasing FP rank.<br>
+  if (ResultBT->getKind() < RBT->getKind() &&<br>
+      // We don't want to warn for system macro.<br>
+      !S.SourceMgr.isInSystemMacro(E->getOperatorLoc()))<br>
+    // warn about dropping FP rank.<br>
+    DiagnoseImpCast(S, E->getRHS(), E->getLHS()->getType(), E->getOperatorLoc(),<br>
+                    diag::warn_impcast_float_result_precision);<br>
+}<br>
+<br>
 static std::string PrettyPrintInRange(const llvm::APSInt &Value,<br>
                                       IntRange Range) {<br>
   if (!Range.Width) return "0";<br>
<br>
Modified: cfe/trunk/test/SemaCXX/warn-float-conversion.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-float-conversion.cpp?rev=339581&r1=339580&r2=339581&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-float-conversion.cpp?rev=339581&r1=339580&r2=339581&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/warn-float-conversion.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/warn-float-conversion.cpp Mon Aug 13 09:38:07 2018<br>
@@ -41,6 +41,32 @@ void Convert(float f, double d, long dou<br>
   l = ld;  //expected-warning{{conversion}}<br>
 }<br>
<br>
+void CompoundAssignment() {<br>
+  int x = 3;<br>
+<br>
+  x += 1.234;  //expected-warning{{conversion}}<br>
+  x -= -0.0;  //expected-warning{{conversion}}<br>
+  x *= 1.1f;  //expected-warning{{conversion}}<br>
+  x /= -2.2f;  //expected-warning{{conversion}}<br>
+<br>
+  int y = x += 1.4f;  //expected-warning{{conversion}}<br>
+<br>
+  float z = 1.1f;<br>
+  double w = -2.2;<br>
+<br>
+  y += z + w;  //expected-warning{{conversion}}<br>
+}<br>
+<br>
+# 1 "foo.h" 3<br>
+//          ^ the following text comes from a system header file.<br>
+#define SYSTEM_MACRO_FLOAT(x) do { (x) += 1.1; } while(0)<br>
+# 1 "warn-float-conversion.cpp" 1<br>
+//                              ^ start of a new file.<br>
+void SystemMacro() {<br>
+  float x = 0.0f;<br>
+  SYSTEM_MACRO_FLOAT(x);<br>
+}<br>
+<br>
 void Test() {<br>
   int a1 = 10.0/2.0;  //expected-warning{{conversion}}<br>
   int a2 = 1.0/2.0;  //expected-warning{{conversion}}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>