[clang] 71f5e43 - [CIR] Fix operator-precedence bugs in assert conditions (#185119)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 6 23:07:25 PST 2026
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());
More information about the cfe-commits
mailing list