diff options
Diffstat (limited to 'tests/diagnostics')
49 files changed, 327 insertions, 1 deletions
diff --git a/tests/diagnostics/command-line/duplicate-output.slang b/tests/diagnostics/command-line/duplicate-output.slang new file mode 100644 index 000000000..794a8717b --- /dev/null +++ b/tests/diagnostics/command-line/duplicate-output.slang @@ -0,0 +1,3 @@ +// duplicate-output.slang + +//TEST:SIMPLE:-entry main -stage compute -o myKernel.dxbc -o myKernel.dxbc diff --git a/tests/diagnostics/command-line/duplicate-output.slang.expected b/tests/diagnostics/command-line/duplicate-output.slang.expected new file mode 100644 index 000000000..23e62357f --- /dev/null +++ b/tests/diagnostics/command-line/duplicate-output.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 80: multiple output paths have been specified entry point 'main' on target 'dxbc' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/duplicate-target.slang b/tests/diagnostics/command-line/duplicate-target.slang new file mode 100644 index 000000000..44bbc62c7 --- /dev/null +++ b/tests/diagnostics/command-line/duplicate-target.slang @@ -0,0 +1,3 @@ +// duplicate-target.slang + +//TEST:SIMPLE:-target hlsl -target hlsl diff --git a/tests/diagnostics/command-line/duplicate-target.slang.expected b/tests/diagnostics/command-line/duplicate-target.slang.expected new file mode 100644 index 000000000..4b8a19b2f --- /dev/null +++ b/tests/diagnostics/command-line/duplicate-target.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 50: the target 'hlsl' has been specified more than once +} +standard output = { +} diff --git a/tests/diagnostics/command-line/entry-point-conflicting-stage.slang b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang new file mode 100644 index 000000000..89cf5cba0 --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang @@ -0,0 +1,5 @@ +// entry-point-conflicting-stage.slang + +//TEST:SIMPLE:-stage vertex -stage fragment + +//TEST:SIMPLE:-entry vsMain -stage compute -stage vertex diff --git a/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.1.expected b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.1.expected new file mode 100644 index 000000000..2f2e70b4b --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.1.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 31: conflicting stages have been specified for entry point 'vsMain' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.expected b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.expected new file mode 100644 index 000000000..2b3adab6b --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-conflicting-stage.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 31: conflicting stages have been specified for entry point 'main' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/entry-point-redundant-stage.slang b/tests/diagnostics/command-line/entry-point-redundant-stage.slang new file mode 100644 index 000000000..903d696c7 --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-redundant-stage.slang @@ -0,0 +1,5 @@ +// entry-point-redundant-stage.slang + +//TEST:SIMPLE:-stage vertex -stage vertex + +//TEST:SIMPLE:-entry vsMain -stage vertex -stage vertex diff --git a/tests/diagnostics/command-line/entry-point-redundant-stage.slang.1.expected b/tests/diagnostics/command-line/entry-point-redundant-stage.slang.1.expected new file mode 100644 index 000000000..36674b409 --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-redundant-stage.slang.1.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 30: the stage 'vertex' was specified more than once for entry point 'vsMain' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/entry-point-redundant-stage.slang.expected b/tests/diagnostics/command-line/entry-point-redundant-stage.slang.expected new file mode 100644 index 000000000..e5a66e0fd --- /dev/null +++ b/tests/diagnostics/command-line/entry-point-redundant-stage.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 30: the stage 'vertex' was specified more than once for entry point 'main' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert b/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert new file mode 100644 index 000000000..0ea731470 --- /dev/null +++ b/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert @@ -0,0 +1,3 @@ +// explicit-implicit-stage-mismatch.vert + +//TEST:SIMPLE:-stage fragment diff --git a/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert.expected b/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert.expected new file mode 100644 index 000000000..fef4b78de --- /dev/null +++ b/tests/diagnostics/command-line/explicit-implicit-stage-mismatch.vert.expected @@ -0,0 +1,7 @@ +result code = -1 +standard error = { +(0): warning 32: the stage specified for entry point 'main' ('pixel') does not match the stage implied by the source file name ('vertex') +(0): error 11: the Slang compiler does not support GLSL as a source language +} +standard output = { +} diff --git a/tests/diagnostics/command-line/option-missing-argument.slang b/tests/diagnostics/command-line/option-missing-argument.slang new file mode 100644 index 000000000..e62b37ba6 --- /dev/null +++ b/tests/diagnostics/command-line/option-missing-argument.slang @@ -0,0 +1,7 @@ +// option-missing-argument.slang + +// Missing argument for an option: + +//TEST:SIMPLE:-target -profile ps_4_0 + +//TEST:SIMPLE:-profile ps_4_0 -target diff --git a/tests/diagnostics/command-line/option-missing-argument.slang.1.expected b/tests/diagnostics/command-line/option-missing-argument.slang.1.expected new file mode 100644 index 000000000..81ab1c485 --- /dev/null +++ b/tests/diagnostics/command-line/option-missing-argument.slang.1.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 21: expected an argument for command-line option '-target' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/option-missing-argument.slang.expected b/tests/diagnostics/command-line/option-missing-argument.slang.expected new file mode 100644 index 000000000..fde023ddd --- /dev/null +++ b/tests/diagnostics/command-line/option-missing-argument.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 13: unknown code generation target '-profile' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/output-no-entry-point.slang b/tests/diagnostics/command-line/output-no-entry-point.slang new file mode 100644 index 000000000..869dcabc4 --- /dev/null +++ b/tests/diagnostics/command-line/output-no-entry-point.slang @@ -0,0 +1,3 @@ +// output-no-entry-point.slang + +//TEST:SIMPLE:-o something.dxbc -entry vsMain -stage vertex -entry fsMain -stage fragment diff --git a/tests/diagnostics/command-line/output-no-entry-point.slang.expected b/tests/diagnostics/command-line/output-no-entry-point.slang.expected new file mode 100644 index 000000000..d04fa06f0 --- /dev/null +++ b/tests/diagnostics/command-line/output-no-entry-point.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 70: the output path 'something.dxbc' is not associated with any entry point; a '-o' option for a compiled kernel must follow the '-entry' option for its corresponding entry point +} +standard output = { +} diff --git a/tests/diagnostics/command-line/output-no-target.slang b/tests/diagnostics/command-line/output-no-target.slang new file mode 100644 index 000000000..32921a8f0 --- /dev/null +++ b/tests/diagnostics/command-line/output-no-target.slang @@ -0,0 +1,3 @@ +// output-no-target.slang + +//TEST:SIMPLE:-target dxbc -target spirv -entry main -stage compute -o bad.hlsl diff --git a/tests/diagnostics/command-line/output-no-target.slang.expected b/tests/diagnostics/command-line/output-no-target.slang.expected new file mode 100644 index 000000000..828c91953 --- /dev/null +++ b/tests/diagnostics/command-line/output-no-target.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 61: no specified '-target' option matches the output path 'bad.hlsl', which implies the 'hlsl' format +} +standard output = { +} diff --git a/tests/diagnostics/command-line/pass-through-no-stage.hlsl b/tests/diagnostics/command-line/pass-through-no-stage.hlsl new file mode 100644 index 000000000..eabdadf10 --- /dev/null +++ b/tests/diagnostics/command-line/pass-through-no-stage.hlsl @@ -0,0 +1,8 @@ +// pass-through-no-stage.hlsl + +// Trying to compile in `-pass-through` mode without +// specifying a stage is an error, because the downstream +// compilers don't support inferring the stage from +// an attribute. + +//TEST:SIMPLE:-pass-through fxc -entry main diff --git a/tests/diagnostics/command-line/pass-through-no-stage.hlsl.expected b/tests/diagnostics/command-line/pass-through-no-stage.hlsl.expected new file mode 100644 index 000000000..87cdbbbb2 --- /dev/null +++ b/tests/diagnostics/command-line/pass-through-no-stage.hlsl.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 35: no stage was specified for entry point 'main'; when using the '-pass-through' option, stages must be fully specified on the command line +} +standard output = { +} diff --git a/tests/diagnostics/command-line/profile-ignored.slang b/tests/diagnostics/command-line/profile-ignored.slang new file mode 100644 index 000000000..8a6590690 --- /dev/null +++ b/tests/diagnostics/command-line/profile-ignored.slang @@ -0,0 +1,14 @@ +// profile-ignored.slang + +// Cases where a `-profile` option gets ignored +// because it doesn't apply to any target + +// Case 1: multiple (conflicting) profiles, so we can't infer a single stage +// +//TEST:SIMPLE:-profile sm_5_0 -profile glsl_450 + + +// Case 2: a `-profile` option before any `-target`, possibly because +// the user is specifying things in the wrong order. +// +//TEST:SIMPLE:-profile sm_5_0 -target dxbc -profile glsl_450 -target spirv diff --git a/tests/diagnostics/command-line/profile-ignored.slang.1.expected b/tests/diagnostics/command-line/profile-ignored.slang.1.expected new file mode 100644 index 000000000..eeaf701c8 --- /dev/null +++ b/tests/diagnostics/command-line/profile-ignored.slang.1.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 43: when using multiple targets, any '-profile' option must follow the '-target' it applies to +} +standard output = { +} diff --git a/tests/diagnostics/command-line/profile-ignored.slang.expected b/tests/diagnostics/command-line/profile-ignored.slang.expected new file mode 100644 index 000000000..f3290a362 --- /dev/null +++ b/tests/diagnostics/command-line/profile-ignored.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 42: a '-profile' option was specified, but no target was specified with '-target' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/stage-ignored.slang b/tests/diagnostics/command-line/stage-ignored.slang new file mode 100644 index 000000000..6d28c52bc --- /dev/null +++ b/tests/diagnostics/command-line/stage-ignored.slang @@ -0,0 +1,9 @@ +// stage-ignored.slang + +// Cases where a `-stage` option gets ignored +// because it doesn't apply to any entry point. + +// A `-stage` option before any `-entry`, possibly because +// the user is specifying things in the wrong order. +// +//TEST:SIMPLE:-stage vertex -entry vsMain -stage fragment -entry psMain diff --git a/tests/diagnostics/command-line/stage-ignored.slang.expected b/tests/diagnostics/command-line/stage-ignored.slang.expected new file mode 100644 index 000000000..725e526fd --- /dev/null +++ b/tests/diagnostics/command-line/stage-ignored.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 34: when compiling multiple entry points, any '-stage' options must follow the '-entry' option that they apply to +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-codegen-target.slang b/tests/diagnostics/command-line/unknown-codegen-target.slang new file mode 100644 index 000000000..57015601d --- /dev/null +++ b/tests/diagnostics/command-line/unknown-codegen-target.slang @@ -0,0 +1,3 @@ +// unknown-codegen-target.slang + +//TEST:SIMPLE:-target z80 diff --git a/tests/diagnostics/command-line/unknown-codegen-target.slang.expected b/tests/diagnostics/command-line/unknown-codegen-target.slang.expected new file mode 100644 index 000000000..0db8d267a --- /dev/null +++ b/tests/diagnostics/command-line/unknown-codegen-target.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 13: unknown code generation target 'z80' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-line-directive-mode.slang b/tests/diagnostics/command-line/unknown-line-directive-mode.slang new file mode 100644 index 000000000..7e61df3f9 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-line-directive-mode.slang @@ -0,0 +1,3 @@ +// unknown-line-directive-mode.slang + +//TEST:SIMPLE:-line-directive-mode quizzical diff --git a/tests/diagnostics/command-line/unknown-line-directive-mode.slang.expected b/tests/diagnostics/command-line/unknown-line-directive-mode.slang.expected new file mode 100644 index 000000000..3451d191b --- /dev/null +++ b/tests/diagnostics/command-line/unknown-line-directive-mode.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 24: unknown '#line' directive mode 'quizzical' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-option.slang b/tests/diagnostics/command-line/unknown-option.slang new file mode 100644 index 000000000..52320d758 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-option.slang @@ -0,0 +1,3 @@ +// unknown-option.slang + +//TEST:SIMPLE:-destroy-all-humans diff --git a/tests/diagnostics/command-line/unknown-option.slang.expected b/tests/diagnostics/command-line/unknown-option.slang.expected new file mode 100644 index 000000000..a74219699 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-option.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 17: unknown command-line option '-destroy-all-humans' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-output-format.slang b/tests/diagnostics/command-line/unknown-output-format.slang new file mode 100644 index 000000000..05f59022b --- /dev/null +++ b/tests/diagnostics/command-line/unknown-output-format.slang @@ -0,0 +1,3 @@ +// unknown-output-format.slang + +//TEST:SIMPLE:-o cookies.jar diff --git a/tests/diagnostics/command-line/unknown-output-format.slang.expected b/tests/diagnostics/command-line/unknown-output-format.slang.expected new file mode 100644 index 000000000..c2f41fa71 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-output-format.slang.expected @@ -0,0 +1,7 @@ +result code = 1 +standard error = { +(0): error 60: cannot infer an output format from the output path 'cookies.jar' +(0): error 70: the output path 'cookies.jar' is not associated with any entry point; a '-o' option for a compiled kernel must follow the '-entry' option for its corresponding entry point +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-pass-through-target.slang b/tests/diagnostics/command-line/unknown-pass-through-target.slang new file mode 100644 index 000000000..7b86f62d6 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-pass-through-target.slang @@ -0,0 +1,3 @@ +// unknown-pass-through-target.slang + +//TEST:SIMPLE:-pass-through subcon diff --git a/tests/diagnostics/command-line/unknown-pass-through-target.slang.expected b/tests/diagnostics/command-line/unknown-pass-through-target.slang.expected new file mode 100644 index 000000000..0c4b1aa4d --- /dev/null +++ b/tests/diagnostics/command-line/unknown-pass-through-target.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 16: unknown pass-through target 'subcon' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-profile.slang b/tests/diagnostics/command-line/unknown-profile.slang new file mode 100644 index 000000000..f96363058 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-profile.slang @@ -0,0 +1,3 @@ +// unknown-profile.slang + +//TEST:SIMPLE:-profile thunder_kiss_65 diff --git a/tests/diagnostics/command-line/unknown-profile.slang.expected b/tests/diagnostics/command-line/unknown-profile.slang.expected new file mode 100644 index 000000000..7e53303fc --- /dev/null +++ b/tests/diagnostics/command-line/unknown-profile.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 14: unknown profile 'thunder_kiss_65' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-source-language.slang b/tests/diagnostics/command-line/unknown-source-language.slang new file mode 100644 index 000000000..c39a3ae4f --- /dev/null +++ b/tests/diagnostics/command-line/unknown-source-language.slang @@ -0,0 +1,5 @@ +// unknown-source-language.slang + +// Unknown source file extension (can't deduce language) + +//TEST:SIMPLE:batmobile.car diff --git a/tests/diagnostics/command-line/unknown-source-language.slang.expected b/tests/diagnostics/command-line/unknown-source-language.slang.expected new file mode 100644 index 000000000..6d596ffab --- /dev/null +++ b/tests/diagnostics/command-line/unknown-source-language.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 12: can't deduce language for input file 'batmobile.car' +} +standard output = { +} diff --git a/tests/diagnostics/command-line/unknown-stage.slang b/tests/diagnostics/command-line/unknown-stage.slang new file mode 100644 index 000000000..1645e5998 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-stage.slang @@ -0,0 +1,3 @@ +// unknown-stage.slang + +//TEST:SIMPLE:-stage green_hills_zone diff --git a/tests/diagnostics/command-line/unknown-stage.slang.expected b/tests/diagnostics/command-line/unknown-stage.slang.expected new file mode 100644 index 000000000..4d00e6ff4 --- /dev/null +++ b/tests/diagnostics/command-line/unknown-stage.slang.expected @@ -0,0 +1,6 @@ +result code = 1 +standard error = { +(0): error 15: unknown stage 'green_hills_zone' +} +standard output = { +} diff --git a/tests/diagnostics/entry-point-no-stage.slang b/tests/diagnostics/entry-point-no-stage.slang new file mode 100644 index 000000000..99ff8193c --- /dev/null +++ b/tests/diagnostics/entry-point-no-stage.slang @@ -0,0 +1,10 @@ +// entry-point-no-stage.slang + +// Confirm that we generate a diagnostic when +// compiling an entry point without any +// stage specified. + +//TEST:SIMPLE:-entry main + +void main() +{} diff --git a/tests/diagnostics/entry-point-no-stage.slang.expected b/tests/diagnostics/entry-point-no-stage.slang.expected new file mode 100644 index 000000000..c63524009 --- /dev/null +++ b/tests/diagnostics/entry-point-no-stage.slang.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +tests/diagnostics/entry-point-no-stage.slang(9): error 38007: no stage specified for entry point 'main'; use either a '[shader("name")]' function attribute or the '-stage <name>' command-line option to specify a stage +} +standard output = { +} diff --git a/tests/diagnostics/entry-point-stage-mismatch.slang b/tests/diagnostics/entry-point-stage-mismatch.slang new file mode 100644 index 000000000..0f143c676 --- /dev/null +++ b/tests/diagnostics/entry-point-stage-mismatch.slang @@ -0,0 +1,10 @@ +// entry-point-stage-mismatch.slang + +// Confirm that we diagnose when stage specified via command +// line doesn't match what was specified via attribute. + +//TEST:SIMPLE:-entry main -stage vertex + +[shader("compute")] +void main() +{} diff --git a/tests/diagnostics/entry-point-stage-mismatch.slang.expected b/tests/diagnostics/entry-point-stage-mismatch.slang.expected new file mode 100644 index 000000000..6a0ebbf96 --- /dev/null +++ b/tests/diagnostics/entry-point-stage-mismatch.slang.expected @@ -0,0 +1,6 @@ +result code = 0 +standard error = { +tests/diagnostics/entry-point-stage-mismatch.slang(9): warning 38006: entry point 'main' being compiled for the 'vertex' stage has a '[shader(...)]' attribute that specifies the 'compute' stage +} +standard output = { +} diff --git a/tests/diagnostics/gh-38-vs.hlsl b/tests/diagnostics/gh-38-vs.hlsl index 7b23efdea..92e0e957e 100644 --- a/tests/diagnostics/gh-38-vs.hlsl +++ b/tests/diagnostics/gh-38-vs.hlsl @@ -1,4 +1,4 @@ -//TEST:SIMPLE: -target dxbc-assembly -profile vs_5_0 -entry main tests/diagnostics/gh-38-fs.hlsl -profile ps_5_0 -entry main +//TEST:SIMPLE: -profile sm_5_0 -entry main -stage vertex tests/diagnostics/gh-38-fs.hlsl -entry main -stage fragment // Ensure that we catch errors with overlapping or conflicting parameter bindings. diff --git a/tests/diagnostics/missing-return.slang b/tests/diagnostics/missing-return.slang new file mode 100644 index 000000000..83f5f9dc1 --- /dev/null +++ b/tests/diagnostics/missing-return.slang @@ -0,0 +1,58 @@ +// missing-return.slang + +//TEST:SIMPLE: + +// Non-`void` function that fails to return + +int bad(int a, int b) +{ + int result = a + b; + + // forgot `return` here +} + +int alsoBad(int a, int b) +{ + if(a > b) + { + return a + b; + } + + // forgot `return` here +} + +int okay(int a, int b) +{ + int tmp = a; + for(;;) + { + if(a > b) + return tmp; + + a = b; + b = tmp; + tmp = a + b; + } + + // Lack of `return` here is not + // a problem, because we can never + // actually get here +} + +int alsoOkay(int a, int b) +{ + int tmp = a; + while(true) + { + if(a > b) + return tmp; + + a = b; + b = tmp; + tmp = a + b; + } + + // Lack of `return` here is not + // a problem, because we can never + // actually get here +}
\ No newline at end of file diff --git a/tests/diagnostics/missing-return.slang.expected b/tests/diagnostics/missing-return.slang.expected new file mode 100644 index 000000000..d44bfc159 --- /dev/null +++ b/tests/diagnostics/missing-return.slang.expected @@ -0,0 +1,7 @@ +result code = 0 +standard error = { +tests/diagnostics/missing-return.slang(7): warning 41010: control flow may reach end of non-'void' function +tests/diagnostics/missing-return.slang(14): warning 41010: control flow may reach end of non-'void' function +} +standard output = { +} |
