diff options
Diffstat (limited to 'tests/bugs/do-loop.hlsl')
| -rw-r--r-- | tests/bugs/do-loop.hlsl | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/bugs/do-loop.hlsl b/tests/bugs/do-loop.hlsl new file mode 100644 index 000000000..eea62e92a --- /dev/null +++ b/tests/bugs/do-loop.hlsl @@ -0,0 +1,35 @@ +//TEST:COMPARE_HLSL: -profile vs_5_0 -target dxbc-assembly + +// 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; +} |
