Raw File
do-loop.hlsl
//TEST_DISABLED:COMPARE_HLSL: -profile vs_5_0

// Check output for `do` loops

cbuffer C : register(b0)
{
	int n;
};

float4 main() : SV_Position
{
	float4 x = 0;
	int i = n;
	{
		do
		{
			x = (x + (float)1) * x;

			// Note(tfoley): The "right" thing here would be
			// `i--`, but that leads to a subtle difference
			// in the final code between just invokeing `fxc`
			// and invoking it on the Slang-generated output
			// (despite the generated HLSL for this line being
			// identical, modulo some `#line` directives).
			//
			// I'm using a binary operator that will yield
			// the same code with its operands swapped, just
			// to work around it. A better long-term fix
			// is to have this test be an end-to-end test
			// that we execute.
			i = i*i;
		} while((bool) i);
	}
    return x;
}
back to top