From fb053433ef64bbae50a8a10ea4381a5695019fac Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 4 Feb 2021 18:45:50 -0500 Subject: Fix line offset problem (#1690) * #include an absolute path didn't work - because paths were taken to always be relative. * WIP diagnostics for line number output. * Small param naming change * Use x macro for pass through compile human name lookup/getting. * WIP on parsing downstream compiler output. * Split out parsing into ParseDiagnosticUtil. Added test result of single line. * Dump out the std output on fail to parse diagnostics. * Change test type for syntax-error-intrinsic.slang be TEST not TEST_DIAGNOSTIC * Use Index for StringUtil. * WIP: First pass support for parsing Slang diagnostics. * WIP Testing comparing with ParseDiagnosticUtil with previous ad-hoc mechanism. * Use the new parsing mechanism for diagnostic comparisons. * Fix layout on GLSL, doesn't have CR so runs into main. * Split out switch on outputting intrinsic 'specials'. Output code around intrinsic as emit - so that we get the appropriate indenting (and potentially other benefits). * Improvements to diagnostics parsing. Better error handling, and fallback handling. Added ability to parse downstream compilers without a prefix. Added ability to parse Slang with a prefix. * DownstreamDiagnostic::Type -> Severity and related fixes. * Small fixes around moving from DownstreamDiagnostic::Type -> Severity * Fix handling of 'special intrinsic' expansion * Split out the handling of intrinsic expansion into it's own type and files. * Fixes to reading expected output - for SimpleLine test. * Test using += to check #line output. * A test around += and return. * Small comment fixes. Co-authored-by: Tim Foley --- .../syntax-error-intrinsic.slang.1.expected | 1 - .../syntax-error-intrinsic.slang.2.expected | 1 - .../syntax-error-intrinsic.slang.3.expected | 1 - .../syntax-error-intrinsic.slang.4.expected | 1 - .../syntax-error-intrinsic.slang.expected | 2 +- tests/diagnostics/syntax-error-op-line-2.slang | 33 ++++++++++++++++++++++ .../syntax-error-op-line-2.slang.expected | 1 + tests/diagnostics/syntax-error-op-line.slang | 22 +++++++++++++++ .../syntax-error-op-line.slang.expected | 1 + 9 files changed, 58 insertions(+), 5 deletions(-) delete mode 100644 tests/diagnostics/syntax-error-intrinsic.slang.1.expected delete mode 100644 tests/diagnostics/syntax-error-intrinsic.slang.2.expected delete mode 100644 tests/diagnostics/syntax-error-intrinsic.slang.3.expected delete mode 100644 tests/diagnostics/syntax-error-intrinsic.slang.4.expected create mode 100644 tests/diagnostics/syntax-error-op-line-2.slang create mode 100644 tests/diagnostics/syntax-error-op-line-2.slang.expected create mode 100644 tests/diagnostics/syntax-error-op-line.slang create mode 100644 tests/diagnostics/syntax-error-op-line.slang.expected (limited to 'tests') diff --git a/tests/diagnostics/syntax-error-intrinsic.slang.1.expected b/tests/diagnostics/syntax-error-intrinsic.slang.1.expected deleted file mode 100644 index 3c032078a..000000000 --- a/tests/diagnostics/syntax-error-intrinsic.slang.1.expected +++ /dev/null @@ -1 +0,0 @@ -18 diff --git a/tests/diagnostics/syntax-error-intrinsic.slang.2.expected b/tests/diagnostics/syntax-error-intrinsic.slang.2.expected deleted file mode 100644 index 3c032078a..000000000 --- a/tests/diagnostics/syntax-error-intrinsic.slang.2.expected +++ /dev/null @@ -1 +0,0 @@ -18 diff --git a/tests/diagnostics/syntax-error-intrinsic.slang.3.expected b/tests/diagnostics/syntax-error-intrinsic.slang.3.expected deleted file mode 100644 index 98d9bcb75..000000000 --- a/tests/diagnostics/syntax-error-intrinsic.slang.3.expected +++ /dev/null @@ -1 +0,0 @@ -17 diff --git a/tests/diagnostics/syntax-error-intrinsic.slang.4.expected b/tests/diagnostics/syntax-error-intrinsic.slang.4.expected deleted file mode 100644 index 98d9bcb75..000000000 --- a/tests/diagnostics/syntax-error-intrinsic.slang.4.expected +++ /dev/null @@ -1 +0,0 @@ -17 diff --git a/tests/diagnostics/syntax-error-intrinsic.slang.expected b/tests/diagnostics/syntax-error-intrinsic.slang.expected index 98d9bcb75..d6b24041c 100644 --- a/tests/diagnostics/syntax-error-intrinsic.slang.expected +++ b/tests/diagnostics/syntax-error-intrinsic.slang.expected @@ -1 +1 @@ -17 +19 diff --git a/tests/diagnostics/syntax-error-op-line-2.slang b/tests/diagnostics/syntax-error-op-line-2.slang new file mode 100644 index 000000000..994e875a1 --- /dev/null +++ b/tests/diagnostics/syntax-error-op-line-2.slang @@ -0,0 +1,33 @@ +// syntax-error-op-line-2.slang + +// NOTE! That although this is a 'diagnostic' like test, it tests using downstream compiler +// the downstream compiler being present is a requirement, so we mark as a 'TEST' so that +// those tests are made. + +//TEST:SIMPLE_LINE:-entry computeMain -target spirv +//TEST:SIMPLE_LINE:-entry computeMain -target dxil -profile cs_6_0 +//TEST:SIMPLE_LINE:-entry computeMain -target dxbc +//TEST:SIMPLE_LINE:-entry computeMain -target dll +//TEST:SIMPLE_LINE:-entry computeMain -target ptx + +// Here the thing being checked is error reporting around return, and += + +int doSomething(int a) +{ + a += a; + + return a + += + __SyntaxError(); +} + +[shader("compute")] +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + int id = int(dispatchThreadID.x); + + int v = int(dispatchThreadID.y); + + v += doSomething(id); +} \ No newline at end of file diff --git a/tests/diagnostics/syntax-error-op-line-2.slang.expected b/tests/diagnostics/syntax-error-op-line-2.slang.expected new file mode 100644 index 000000000..aabe6ec39 --- /dev/null +++ b/tests/diagnostics/syntax-error-op-line-2.slang.expected @@ -0,0 +1 @@ +21 diff --git a/tests/diagnostics/syntax-error-op-line.slang b/tests/diagnostics/syntax-error-op-line.slang new file mode 100644 index 000000000..eab15e4a4 --- /dev/null +++ b/tests/diagnostics/syntax-error-op-line.slang @@ -0,0 +1,22 @@ +// syntax-error-op-line.slang + +// NOTE! That although this is a 'diagnostic' like test, it tests using downstream compiler +// the downstream compiler being present is a requirement, so we mark as a 'TEST' so that +// those tests are made. + +//TEST:SIMPLE_LINE:-entry computeMain -target spirv +//TEST:SIMPLE_LINE:-entry computeMain -target dxil -profile cs_6_0 +//TEST:SIMPLE_LINE:-entry computeMain -target dxbc +//TEST:SIMPLE_LINE:-entry computeMain -target dll +//TEST:SIMPLE_LINE:-entry computeMain -target ptx + +[shader("compute")] +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + int id = int(dispatchThreadID.x); + + int v = int(dispatchThreadID.y); + + v += id + __SyntaxError(); +} \ No newline at end of file diff --git a/tests/diagnostics/syntax-error-op-line.slang.expected b/tests/diagnostics/syntax-error-op-line.slang.expected new file mode 100644 index 000000000..aabe6ec39 --- /dev/null +++ b/tests/diagnostics/syntax-error-op-line.slang.expected @@ -0,0 +1 @@ +21 -- cgit v1.2.3