Author: Henrich Lauko Date: 2026-03-07T08:07:21+01:00 New Revision: 71f5e43bc658d89c507867218052917e816c5180
URL: https://github.com/llvm/llvm-project/commit/71f5e43bc658d89c507867218052917e816c5180 DIFF: https://github.com/llvm/llvm-project/commit/71f5e43bc658d89c507867218052917e816c5180.diff LOG: [CIR] Fix operator-precedence bugs in assert conditions (#185119) Due to && binding tighter than ||, asserts of the form assert(A || B && "msg") always pass when A is true. Add parentheses so the string message is properly attached: assert((A || B) && "msg"). Added: Modified: clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp Removed: ################################################################################ diff --git a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp index aa59e7f2bf8e2..c57f9a3b2ce9d 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp @@ -591,9 +591,8 @@ mlir::Value ComplexExprEmitter::VisitUnaryMinus(const UnaryOperator *e) { mlir::Value ComplexExprEmitter::VisitPlusMinus(const UnaryOperator *e, cir::UnaryOpKind kind, QualType promotionType) { - assert(kind == cir::UnaryOpKind::Plus || - kind == cir::UnaryOpKind::Minus && - "Invalid UnaryOp kind for ComplexType Plus or Minus"); + assert((kind == cir::UnaryOpKind::Plus || kind == cir::UnaryOpKind::Minus) && + "Invalid UnaryOp kind for ComplexType Plus or Minus"); mlir::Value op; if (!promotionType.isNull()) @@ -1097,8 +1096,8 @@ mlir::Value CIRGenFunction::emitComplexPrePostIncDec(const UnaryOperator *e, LValue lv, cir::UnaryOpKind op, bool isPre) { - assert(op == cir::UnaryOpKind::Inc || - op == cir::UnaryOpKind::Dec && "Invalid UnaryOp kind for ComplexType"); + assert((op == cir::UnaryOpKind::Inc || op == cir::UnaryOpKind::Dec) && + "Invalid UnaryOp kind for ComplexType"); mlir::Value inVal = emitLoadOfComplex(lv, e->getExprLoc()); mlir::Location loc = getLoc(e->getExprLoc()); diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index 6f4fb1729b5c1..1b5ba5ee6783f 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -700,8 +700,9 @@ class ScalarExprEmitter : public StmtVisitor<ScalarExprEmitter, mlir::Value> { if (mlir::isa<cir::SingleType, cir::DoubleType>(value.getType())) { // Create the inc/dec operation. // NOTE(CIR): clang calls CreateAdd but folds this to a unary op - assert(kind == cir::UnaryOpKind::Inc || - kind == cir::UnaryOpKind::Dec && "Invalid UnaryOp kind"); + assert( + (kind == cir::UnaryOpKind::Inc || kind == cir::UnaryOpKind::Dec) && + "Invalid UnaryOp kind"); value = emitUnaryOp(e, kind, value); } else { cgf.cgm.errorNYI(e->getSourceRange(), "Unary inc/dec other fp type"); @@ -733,8 +734,8 @@ class ScalarExprEmitter : public StmtVisitor<ScalarExprEmitter, mlir::Value> { mlir::Value emitIncDecConsiderOverflowBehavior(const UnaryOperator *e, mlir::Value inVal, cir::UnaryOpKind kind) { - assert(kind == cir::UnaryOpKind::Inc || - kind == cir::UnaryOpKind::Dec && "Invalid UnaryOp kind"); + assert((kind == cir::UnaryOpKind::Inc || kind == cir::UnaryOpKind::Dec) && + "Invalid UnaryOp kind"); switch (cgf.getLangOpts().getSignedOverflowBehavior()) { case LangOptions::SOB_Defined: return emitUnaryOp(e, kind, inVal, /*nsw=*/false); @@ -2524,9 +2525,9 @@ mlir::Value ScalarExprEmitter::VisitUnaryImag(const UnaryOperator *e) { mlir::Value ScalarExprEmitter::VisitRealImag(const UnaryOperator *e, QualType promotionTy) { - assert(e->getOpcode() == clang::UO_Real || - e->getOpcode() == clang::UO_Imag && - "Invalid UnaryOp kind for ComplexType Real or Imag"); + assert( + (e->getOpcode() == clang::UO_Real || e->getOpcode() == clang::UO_Imag) && + "Invalid UnaryOp kind for ComplexType Real or Imag"); Expr *op = e->getSubExpr(); mlir::Location loc = cgf.getLoc(e->getExprLoc()); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
