[PATCH] D45401: Fix 31480 - warn more aggressively when assignments get used as a boolean values

Will Song via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 6 23:19:18 PDT 2018


incertia updated this revision to Diff 141477.
incertia added a comment.

Pulled the check outside of the case statement.


https://reviews.llvm.org/D45401

Files:
  lib/Sema/SemaExpr.cpp
  lib/Sema/SemaExprCXX.cpp


Index: lib/Sema/SemaExprCXX.cpp
===================================================================
--- lib/Sema/SemaExprCXX.cpp
+++ lib/Sema/SemaExprCXX.cpp
@@ -3839,6 +3839,11 @@
     FromType = From->getType();
   }
 
+  // implicit boolean conversions should have their assignments checked
+  if (SCS.Second == ICK_Boolean_Conversion || FromType == Context.BoolTy) {
+    DiagnoseAssignmentAsCondition(From->IgnoreImpCasts());
+  }
+
   // If we're converting to an atomic type, first convert to the corresponding
   // non-atomic type.
   QualType ToAtomicType;
Index: lib/Sema/SemaExpr.cpp
===================================================================
--- lib/Sema/SemaExpr.cpp
+++ lib/Sema/SemaExpr.cpp
@@ -15409,7 +15409,10 @@
 
 ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E,
                                        bool IsConstexpr) {
-  DiagnoseAssignmentAsCondition(E);
+  // an assignment always produces an lvalue, and we now check this inside
+  // PerformImplicitConversion, as conditions will always be implicitly
+  // converted to an rvalue
+  // DiagnoseAssignmentAsCondition(E);
   if (ParenExpr *parenE = dyn_cast<ParenExpr>(E))
     DiagnoseEqualityWithExtraParens(parenE);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45401.141477.patch
Type: text/x-patch
Size: 1226 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180407/f0aabc08/attachment.bin>


More information about the cfe-commits mailing list