================
@@ -687,6 +687,48 @@ void Sema::diagnoseZeroToNullptrConversion(CastKind Kind,
const Expr *E) {
<< FixItHint::CreateReplacement(E->getSourceRange(), "nullptr");
}
+void Sema::DiagnoseAssignmentBoolContext(Expr *E, QualType Ty) {
+ // Use copy to not alter original expression.
+ Expr *ECopy = E;
+
+ if (Ty->isBooleanType()) {
+ // `bool(x=0)` and if (x=0){} emit:
+ // - ImplicitCastExpr bool IntegralToBoolean
+ // -- ImplicitCastExpr int LValueToRValue
+ // --- Assignment ...
+ // But should still emit this warning (at least gcc does), even if
bool-cast
----------------
erichkeane wrote:
>Basically just asking if ImplicitCastExpr is the only valid expression that
>can be in between the outer cast and the assignment expression or if there is
>another implicit expression that would need to be matched here.
None I can think of? We might end up having a case where we don't properly
warn if we miss anything here, which is perhaps acceptable.
>How can I check for that? Do you have a more robust approach?
Having this happen on the implicit cast makes this a little awkward since we
can't record 'what is going on here' as we go. That said, I think punting /not
warning in the case of user-defined-operators is probably OK, that will prevent
us from diagnosing in the cases of some DSLs or something, which is the
behavior we probably want?
https://github.com/llvm/llvm-project/pull/115234
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits