From c3bc49624891d9799975ae4a47e598961eea8aab Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Mon, 26 Feb 2018 14:02:29 -0800 Subject: Merge from 0.9.x (#429) * Fix bug when subscripting a type that must be split (#396) The logic was creating a `PairPseudoExpr` as part of a subscript (`operator[]`) operation, but neglecting to fill in its `pairInfo` field, which led to a null-pointer crash further along. * Allow writes to UAV textures (#416) Work on #415 This issue is already fixed in the `v0.10.*` line, but I'm back-porting the fix to `v0.9.*`. The issue here was that the stdlib declarations for texture types were only including the `get` accessor for subscript operations, even if the texture was write-able. I've also included the fixes for other subscript accessors in the stdlib (notably that `OutputPatch` is readable, but not writable, despite what the name seems to imply). * Fix infinite loop in semantic parsing (#424) The code for parsing semantics was looking for a fixed set of tokens to terminate a semantic list, rather than assuming that whenever you don't see a `:` ahead, you probably are done with semantics. This meant that you could get into an infinite loop just with simple mistakes like leaving out a `;`. This change fixes the parser to note infinite loop in this case, and adds a test case to verify the fix. --- .../missing-semicolon-after-semantic.slang | 9 +++++++++ .../missing-semicolon-after-semantic.slang.expected | 6 ++++++ tests/front-end/uav-write.slang | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 tests/diagnostics/missing-semicolon-after-semantic.slang create mode 100644 tests/diagnostics/missing-semicolon-after-semantic.slang.expected create mode 100644 tests/front-end/uav-write.slang (limited to 'tests') diff --git a/tests/diagnostics/missing-semicolon-after-semantic.slang b/tests/diagnostics/missing-semicolon-after-semantic.slang new file mode 100644 index 000000000..00fc3aa6c --- /dev/null +++ b/tests/diagnostics/missing-semicolon-after-semantic.slang @@ -0,0 +1,9 @@ +//TEST:SIMPLE: + +// Forgetting to put in the `;` after declaraing a variable/field +// with a semantic used to put the compiler into an infinite loop. + +struct Test +{ + float4 pos : SV_POSITION +}; diff --git a/tests/diagnostics/missing-semicolon-after-semantic.slang.expected b/tests/diagnostics/missing-semicolon-after-semantic.slang.expected new file mode 100644 index 000000000..ae82385d0 --- /dev/null +++ b/tests/diagnostics/missing-semicolon-after-semantic.slang.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +tests/diagnostics/missing-semicolon-after-semantic.slang(9): error 20001: unexpected '}', expected ';' +} +standard output = { +} diff --git a/tests/front-end/uav-write.slang b/tests/front-end/uav-write.slang new file mode 100644 index 000000000..c70af26a3 --- /dev/null +++ b/tests/front-end/uav-write.slang @@ -0,0 +1,20 @@ +// uav-write.slang +//TEST:SIMPLE: + +// Just confirming that code that writes to a UAV will type-check. + +RWTexture2D gOutput; + +float4 test(uint2 coord, float4 value) +{ + // read + value = value + gOutput[coord]; + + // write + gOutput[coord] = value; + + // read-modify-write + gOutput[coord] += value; + + return value; +} \ No newline at end of file -- cgit v1.2.3