From ff1c56ad223a9185fbdbe8f71f40470c99672551 Mon Sep 17 00:00:00 2001 From: Martijn Courteaux Date: Thu, 3 Sep 2026 10:14:18 +0200 Subject: [PATCH 1/2] Put the actual printed IR in the requirement_failed string. The simplifier was simplifying it down to 'false'. --- python_bindings/halide/test/correctness/basics.py | 5 +++-- src/IROperator.cpp | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/python_bindings/halide/test/correctness/basics.py b/python_bindings/halide/test/correctness/basics.py index 15bc76087e77..e1853eb05c52 100644 --- a/python_bindings/halide/test/correctness/basics.py +++ b/python_bindings/halide/test/correctness/basics.py @@ -410,12 +410,13 @@ def test_requirements(): delta.set(1) p.realize([10]) - with assert_throws(hl.HalideError, r"Requirement Failed: \(false\)"): + with assert_throws(hl.HalideError, r"Requirement Failed: \(\(delta != 0\)\)"): delta.set(0) p.realize([10]) with assert_throws( - hl.HalideError, r"Requirement Failed: \(false\) negative values are bad -1" + hl.HalideError, + r"Requirement Failed: \(\(delta > 0\)\) negative values are bad -1", ): delta.set(-1) p.realize([10]) diff --git a/src/IROperator.cpp b/src/IROperator.cpp index 996c9eb4a469..d5f3ca9096e8 100644 --- a/src/IROperator.cpp +++ b/src/IROperator.cpp @@ -1284,9 +1284,11 @@ Expr unwrap_tags(const Expr &e) { } Expr requirement_failed_error(Expr condition, const std::vector &args) { + std::stringstream cond_str; + cond_str << condition; return Call::make(Int(32), "halide_error_requirement_failed", - {stringify({std::move(condition)}), combine_strings(args)}, + {cond_str.str(), combine_strings(args)}, Call::Extern); } From 0e1f87a34a427c5714411da6c796371a5f40cfe5 Mon Sep 17 00:00:00 2001 From: Martijn Courteaux Date: Thu, 3 Sep 2026 12:13:17 +0200 Subject: [PATCH 2/2] clang-tidy... --- src/IROperator.cpp | 2 +- src/IROperator.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/IROperator.cpp b/src/IROperator.cpp index d5f3ca9096e8..710883026201 100644 --- a/src/IROperator.cpp +++ b/src/IROperator.cpp @@ -1283,7 +1283,7 @@ Expr unwrap_tags(const Expr &e) { return e; } -Expr requirement_failed_error(Expr condition, const std::vector &args) { +Expr requirement_failed_error(const Expr &condition, const std::vector &args) { std::stringstream cond_str; cond_str << condition; return Call::make(Int(32), diff --git a/src/IROperator.h b/src/IROperator.h index a8fc33f291a9..6489a580e106 100644 --- a/src/IROperator.h +++ b/src/IROperator.h @@ -411,7 +411,7 @@ inline HALIDE_NO_USER_CODE_INLINE void collect_print_args(std::vector &arg collect_print_args(args, std::forward(more_args)...); } -Expr requirement_failed_error(Expr condition, const std::vector &args); +Expr requirement_failed_error(const Expr &condition, const std::vector &args); Expr memoize_tag_helper(Expr result, const std::vector &cache_key_values);