controlflow/utils.h#

Control-flow schema helpers for shape inference, including onnx_light::IfInferenceFunction(), onnx_light::LoopInferenceFunction(), and onnx_light::ScanInferenceFunction().

Declares control-flow shape-inference helpers shared by If, Loop, and Scan.

This header exposes utility routines used by control-flow operator schemas to validate axes, clear inferred shapes, and propagate shape/type information.

namespace onnx_light

Alias that makes onnx-light headers compatible with code that references ONNX_LIGHT_NAMESPACE (the macro used in the standard onnx package).

Set to ONNX_LIGHT_NAMESPACE so both names resolve to the same namespace.

Symbol-visibility attribute for the public onnx-light C++ API.

Maps the upstream compatibility macro to onnx-light’s explicit proto ABI annotation. This keeps declarations from vendored ONNX headers visible when lib_onnx_proto uses hidden visibility by default.

Namespace alias so that ONNX C++ code (and consumers such as onnxruntime) that refers to the literal onnx namespace — rather than the ONNX_NAMESPACE macro — resolves to the onnx-light namespace. The standard onnx package lives in namespace onnx; onnx-light uses onnx_light (via ONNX_LIGHT_NAMESPACE), so this alias keeps onnx-light a true drop-in. It is only introduced when the onnx-light namespace differs from onnx.

Functions

void ClearShape(TypeProto &input_type)#
int handle_negative_axis_validate(const std::string &attrib, int axis, int rank)#
size_t ValidateScanCountsAndGetNumLoopStateVars(size_t num_inputs, size_t num_scan_inputs, size_t num_outputs)#

Validates the Scan input/output counts against the declared num_scan_inputs and returns the number of loop-state variables.

Guards both subtractions against size_t underflow (GHSA-qrhj-v62m-vmpf): when num_scan_inputs exceeds the input count the subtraction num_inputs - num_scan_inputs wraps around; when the resulting loop-state-variable count exceeds the output count the second subtraction wraps around. Both conditions call fail_shape_inference instead of producing a huge index.

Used by ScanInferenceFunction (opset 9+) and ScanInferenceFunction_opset9. Opset 8 has an extra sequence_lens offset and is handled inline in ScanInferenceFunction_opset8.

void IfInferenceFunction(InferenceContext &ctx)#
void LoopInferenceFunction(InferenceContext &ctx)#
void ScanInferenceFunction(InferenceContext &ctx)#