diff --git a/src/CodeGen_C.cpp b/src/CodeGen_C.cpp index 02b888f5b981..9231c55fa705 100644 --- a/src/CodeGen_C.cpp +++ b/src/CodeGen_C.cpp @@ -191,11 +191,11 @@ template inline T halide_cpp_min(const T &a, const T &b) {return (a < b) ? a : b;} template -inline void halide_unused(const T&) {} +inline void halide_maybe_unused(const T&) {} template const B &return_second(const A &a, const B &b) { - halide_unused(a); + halide_maybe_unused(a); return b; } @@ -1873,9 +1873,9 @@ void CodeGen_C::compile(const LoweredFunc &f, const std::map(__user_context)" : "nullptr") << ";\n"; - if (target.has_feature(Target::NoAsserts)) { - stream << get_indent() << "halide_unused(_ucon);"; - } + // Always declare it unused, since this could be a generated closure that doesn't + // use _ucon at all, regardless of NoAsserts. + stream << get_indent() << "halide_maybe_unused(_ucon);\n"; // Emit the body print(f.body); @@ -2750,7 +2750,7 @@ void CodeGen_C::visit(const Let *op) { std::string name = print_name(op->name); stream << get_indent() << "auto " << name << " = " << id_value << ";\n"; - stream << get_indent() << "halide_unused(" << name << ");\n"; + stream << get_indent() << "halide_maybe_unused(" << name << ");\n"; } else { Expr new_var = Variable::make(op->value.type(), id_value); body = substitute(op->name, new_var, body); @@ -2845,7 +2845,7 @@ void CodeGen_C::visit(const LetStmt *op) { std::string name = print_name(op->name); stream << get_indent() << "auto " << name << " = " << id_value << ";\n"; - stream << get_indent() << "halide_unused(" << name << ");\n"; + stream << get_indent() << "halide_maybe_unused(" << name << ");\n"; } else { Expr new_var = Variable::make(op->value.type(), id_value); body = substitute(op->name, new_var, body); @@ -2862,7 +2862,7 @@ void CodeGen_C::create_assertion(const string &id_cond, const Expr &message) { << "Assertion result is not an int: " << message; if (target.has_feature(Target::NoAsserts)) { - stream << get_indent() << "halide_unused(" << id_cond << ");\n"; + stream << get_indent() << "halide_maybe_unused(" << id_cond << ");\n"; return; } @@ -3152,7 +3152,7 @@ void CodeGen_C::visit(const Evaluate *op) { return; } string id = print_expr(op->value); - stream << get_indent() << "halide_unused(" << id << ");\n"; + stream << get_indent() << "halide_maybe_unused(" << id << ");\n"; } void CodeGen_C::visit(const Shuffle *op) { @@ -3261,9 +3261,10 @@ extern "C" { HALIDE_FUNCTION_ATTRS int test1(struct halide_buffer_t *_buf_buffer, float _alpha, int32_t _beta, void const *__user_context) { void * const _ucon = const_cast(__user_context); + halide_maybe_unused(_ucon); auto *_0 = _halide_buffer_get_host(_buf_buffer); auto _buf = _0; - halide_unused(_buf); + halide_maybe_unused(_buf); { int64_t _1 = 43; int64_t _2 = _1 * _beta; diff --git a/src/CodeGen_D3D12Compute_Dev.cpp b/src/CodeGen_D3D12Compute_Dev.cpp index 41fa6ecc2660..7d52c661df04 100644 --- a/src/CodeGen_D3D12Compute_Dev.cpp +++ b/src/CodeGen_D3D12Compute_Dev.cpp @@ -1271,7 +1271,7 @@ void CodeGen_D3D12Compute_Dev::init_module() { "\n" << "\n"; - src_stream << "#define halide_unused(x) (void)(x)\n"; + src_stream << "#define halide_maybe_unused(x) (void)(x)\n"; // Write out the Halide math functions. src_stream diff --git a/src/CodeGen_Metal_Dev.cpp b/src/CodeGen_Metal_Dev.cpp index d76ebb708ce5..c63f23a1b79f 100644 --- a/src/CodeGen_Metal_Dev.cpp +++ b/src/CodeGen_Metal_Dev.cpp @@ -788,7 +788,7 @@ void CodeGen_Metal_Dev::init_module() { << "#endif\n" << "}\n"; // close namespace - src_stream << "#define halide_unused(x) (void)(x)\n"; + src_stream << "#define halide_maybe_unused(x) (void)(x)\n"; src_stream << "\n"; diff --git a/src/CodeGen_OpenCL_Dev.cpp b/src/CodeGen_OpenCL_Dev.cpp index bd58806b01e2..3302b9413076 100644 --- a/src/CodeGen_OpenCL_Dev.cpp +++ b/src/CodeGen_OpenCL_Dev.cpp @@ -1149,7 +1149,7 @@ void CodeGen_OpenCL_Dev::init_module() { // There does not appear to be a reliable way to safely ignore unused // variables in OpenCL C. See https://github.com/halide/Halide/issues/4918. - src_stream << "#define halide_unused(x)\n"; + src_stream << "#define halide_maybe_unused(x)\n"; if (target.has_feature(Target::CLDoubles)) { src_stream << "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n" diff --git a/src/CodeGen_OpenGLCompute_Dev.cpp b/src/CodeGen_OpenGLCompute_Dev.cpp index 9eec624c7e6c..3dc4ea6604fa 100644 --- a/src/CodeGen_OpenGLCompute_Dev.cpp +++ b/src/CodeGen_OpenGLCompute_Dev.cpp @@ -870,7 +870,7 @@ void CodeGen_OpenGLCompute_C::add_kernel(const Stmt &s, stream << "#version 430\n"; } stream << "float float_from_bits(int x) { return intBitsToFloat(int(x)); }\n"; - stream << "#define halide_unused(x) (void)(x)\n"; + stream << "#define halide_maybe_unused(x) (void)(x)\n"; for (size_t i = 0; i < args.size(); i++) { if (args[i].is_buffer) {