diff options
Diffstat (limited to 'tests/diagnostics')
30 files changed, 274 insertions, 0 deletions
diff --git a/tests/diagnostics/break-outside-loop.spire b/tests/diagnostics/break-outside-loop.spire new file mode 100644 index 000000000..f86b0bad6 --- /dev/null +++ b/tests/diagnostics/break-outside-loop.spire @@ -0,0 +1,4 @@ +//TEST:SIMPLE: +// `break` where it isn't allowed + +void foo() { break; } diff --git a/tests/diagnostics/break-outside-loop.spire.expected b/tests/diagnostics/break-outside-loop.spire.expected new file mode 100644 index 000000000..2d56efaa9 --- /dev/null +++ b/tests/diagnostics/break-outside-loop.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/break-outside-loop.spire(4): error 30003: 'break' must appear inside loop constructs. +} +standard output = { +} diff --git a/tests/diagnostics/call-argument-type.spire b/tests/diagnostics/call-argument-type.spire new file mode 100644 index 000000000..d9663147f --- /dev/null +++ b/tests/diagnostics/call-argument-type.spire @@ -0,0 +1,11 @@ +//TEST:SIMPLE: +// call function with wrong argument type + +struct A {}; +struct B {}; + +void f(A a) {} +void g(B b) +{ + f(b); +} diff --git a/tests/diagnostics/call-argument-type.spire.expected b/tests/diagnostics/call-argument-type.spire.expected new file mode 100644 index 000000000..09a01a359 --- /dev/null +++ b/tests/diagnostics/call-argument-type.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/call-argument-type.spire(10): error 30019: expected an expression of type 'A', got 'B' +} +standard output = { +} diff --git a/tests/diagnostics/continue-outside-loop.spire b/tests/diagnostics/continue-outside-loop.spire new file mode 100644 index 000000000..cad9dce6e --- /dev/null +++ b/tests/diagnostics/continue-outside-loop.spire @@ -0,0 +1,4 @@ +//TEST:SIMPLE: +// `continue` where it isn't allowed + +void foo() { continue; } diff --git a/tests/diagnostics/continue-outside-loop.spire.expected b/tests/diagnostics/continue-outside-loop.spire.expected new file mode 100644 index 000000000..d12cceb78 --- /dev/null +++ b/tests/diagnostics/continue-outside-loop.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/continue-outside-loop.spire(4): error 30004: 'continue' must appear inside loop constructs. +} +standard output = { +} diff --git a/tests/diagnostics/expected-token-eof.spire b/tests/diagnostics/expected-token-eof.spire new file mode 100644 index 000000000..99ab161ec --- /dev/null +++ b/tests/diagnostics/expected-token-eof.spire @@ -0,0 +1,6 @@ +//TEST:SIMPLE: +// expected one token, but got EOF + +int foo() +{ + int a = 3
\ No newline at end of file diff --git a/tests/diagnostics/expected-token-eof.spire.expected b/tests/diagnostics/expected-token-eof.spire.expected new file mode 100644 index 000000000..121ac3374 --- /dev/null +++ b/tests/diagnostics/expected-token-eof.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/expected-token-eof.spire(6): error 20001: unexpected end of file, expected ';' +} +standard output = { +} diff --git a/tests/diagnostics/expected-token.spire b/tests/diagnostics/expected-token.spire new file mode 100644 index 000000000..db85e7b92 --- /dev/null +++ b/tests/diagnostics/expected-token.spire @@ -0,0 +1,7 @@ +//TEST:SIMPLE: +// expected one token, but got another + +int foo() +{ + int a = 3 ] +}
\ No newline at end of file diff --git a/tests/diagnostics/expected-token.spire.expected b/tests/diagnostics/expected-token.spire.expected new file mode 100644 index 000000000..508a06726 --- /dev/null +++ b/tests/diagnostics/expected-token.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/expected-token.spire(6): error 20001: unexpected ']', expected ';' +} +standard output = { +} diff --git a/tests/diagnostics/function-redefinition.spire.disabled b/tests/diagnostics/function-redefinition.spire.disabled new file mode 100644 index 000000000..d47cb1bbc --- /dev/null +++ b/tests/diagnostics/function-redefinition.spire.disabled @@ -0,0 +1,5 @@ +//TEST:SIMPLE: +// redefining a function + +int foo(int a) { return 0; } +int foo(int b) { return 1; } diff --git a/tests/diagnostics/function-redefinition.spire.expected b/tests/diagnostics/function-redefinition.spire.expected new file mode 100644 index 000000000..94b0d3626 --- /dev/null +++ b/tests/diagnostics/function-redefinition.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/function-redefinition.spire(5): error 30001: 'foo(int)': function redefinition. +} +standard output = { +} diff --git a/tests/diagnostics/hull-shader-invalid-domain.spire.disabled b/tests/diagnostics/hull-shader-invalid-domain.spire.disabled new file mode 100644 index 000000000..a1341631a --- /dev/null +++ b/tests/diagnostics/hull-shader-invalid-domain.spire.disabled @@ -0,0 +1,53 @@ +//TEST:SIMPLE: +// `HullShader` without `Domain` attribute + +pipeline P +{ + world CoarseVertex; + world ControlPoint; + world CornerPoint; + world TessPatch; + world FineVertex; + + require @FineVertex vec4 RS_Position; + require @ControlPoint vec2 tessLevelInner; + require @ControlPoint vec4 tessLevelOuter; + + // implicit import operator CoarseVertex->CornerPoint + extern @CornerPoint CoarseVertex[] CoarseVertex_ControlPoint; + [PerCornerIterator] + extern @CornerPoint int HS_CornerID; + + extern @ControlPoint CoarseVertex[] CoarseVertex_ControlPoint; + extern @TessPatch CoarseVertex[] CoarseVertex_ControlPoint; + [InvocationId] + extern @ControlPoint int invocationId; + extern @FineVertex ControlPoint[] ControlPoint_tes; + extern @FineVertex Patch<TessPatch> perPatch_tes; + + extern @FineVertex Patch<CornerPoint[3]> perCorner_tes; + [TessCoord] + extern @FineVertex vec3 tessCoord; + + stage hs : HullShader + { + PatchWorld: TessPatch; + ControlPointWorld: ControlPoint; + CornerPointWorld: CornerPoint; + InputControlPointCount: 3; + ControlPointCount: 1; + Domain: pentagons; + TessLevelOuter: tessLevelOuter; + TessLevelInner: tessLevelInner; + Partitioning: integer; + OutputTopology: triangle_ccw; + } +} + +shader S + targets P +{ + @FineVertex float4 RS_Position = float4(0.0); + @ControlPoint float2 tessLevelInner = float2(2.0); + @ControlPoint float4 tessLevelOuter = float4(2.0); +}
\ No newline at end of file diff --git a/tests/diagnostics/hull-shader-invalid-domain.spire.expected b/tests/diagnostics/hull-shader-invalid-domain.spire.expected new file mode 100644 index 000000000..89b4634aa --- /dev/null +++ b/tests/diagnostics/hull-shader-invalid-domain.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/hull-shader-invalid-domain.spire(39): error 50053: 'Domain' should be either 'triangles' or 'quads'. +} +standard output = { +} diff --git a/tests/diagnostics/hull-shader-no-domain.spire.disabled b/tests/diagnostics/hull-shader-no-domain.spire.disabled new file mode 100644 index 000000000..87bf2a81c --- /dev/null +++ b/tests/diagnostics/hull-shader-no-domain.spire.disabled @@ -0,0 +1,53 @@ +//TEST:SIMPLE: +// `HullShader` without `Domain` attribute + +pipeline P +{ + world CoarseVertex; + world ControlPoint; + world CornerPoint; + world TessPatch; + world FineVertex; + + require @FineVertex vec4 RS_Position; + require @ControlPoint vec2 tessLevelInner; + require @ControlPoint vec4 tessLevelOuter; + + // implicit import operator CoarseVertex->CornerPoint + extern @CornerPoint CoarseVertex[] CoarseVertex_ControlPoint; + [PerCornerIterator] + extern @CornerPoint int HS_CornerID; + + extern @ControlPoint CoarseVertex[] CoarseVertex_ControlPoint; + extern @TessPatch CoarseVertex[] CoarseVertex_ControlPoint; + [InvocationId] + extern @ControlPoint int invocationId; + extern @FineVertex ControlPoint[] ControlPoint_tes; + extern @FineVertex Patch<TessPatch> perPatch_tes; + + extern @FineVertex Patch<CornerPoint[3]> perCorner_tes; + [TessCoord] + extern @FineVertex vec3 tessCoord; + + stage hs : HullShader + { + PatchWorld: TessPatch; + ControlPointWorld: ControlPoint; + CornerPointWorld: CornerPoint; + InputControlPointCount: 3; + ControlPointCount: 1; +// Domain: triangles; + TessLevelOuter: tessLevelOuter; + TessLevelInner: tessLevelInner; + Partitioning: integer; + OutputTopology: triangle_ccw; + } +} + +shader S + targets P +{ + @FineVertex float4 RS_Position = float4(0.0); + @ControlPoint float2 tessLevelInner = float2(2.0); + @ControlPoint float4 tessLevelOuter = float4(2.0); +}
\ No newline at end of file diff --git a/tests/diagnostics/hull-shader-no-domain.spire.expected b/tests/diagnostics/hull-shader-no-domain.spire.expected new file mode 100644 index 000000000..08a08ad79 --- /dev/null +++ b/tests/diagnostics/hull-shader-no-domain.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/hull-shader-no-domain.spire(32): error 50052: 'HullShader' requires attribute 'Domain'. +} +standard output = { +} diff --git a/tests/diagnostics/illegal-character.spire b/tests/diagnostics/illegal-character.spire new file mode 100644 index 000000000..5915e861f --- /dev/null +++ b/tests/diagnostics/illegal-character.spire @@ -0,0 +1,5 @@ +//TEST:SIMPLE: +// illegal character + +` + diff --git a/tests/diagnostics/illegal-character.spire.expected b/tests/diagnostics/illegal-character.spire.expected new file mode 100644 index 000000000..301b99063 --- /dev/null +++ b/tests/diagnostics/illegal-character.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/illegal-character.spire(4): error 10000: illegal character '`' +} +standard output = { +} diff --git a/tests/diagnostics/missing-file.spire.disabled b/tests/diagnostics/missing-file.spire.disabled new file mode 100644 index 000000000..f340dd95e --- /dev/null +++ b/tests/diagnostics/missing-file.spire.disabled @@ -0,0 +1,3 @@ +// trying to import a non-existant file + +using "does-not-exist.spire" diff --git a/tests/diagnostics/missing-file.spire.expected b/tests/diagnostics/missing-file.spire.expected new file mode 100644 index 000000000..d4722c0e2 --- /dev/null +++ b/tests/diagnostics/missing-file.spire.expected @@ -0,0 +1,7 @@ +result code = -1 +standard error = { +Tests/Diagnostics/missing-file.spire(1): error 20001: unexpected end of file, expected ';' +Tests/Diagnostics/missing-file.spire(4): error 2: cannot find file 'does-not-exist.spire'. +} +standard output = { +} diff --git a/tests/diagnostics/missing-include-file.spire b/tests/diagnostics/missing-include-file.spire new file mode 100644 index 000000000..9e0f99b9c --- /dev/null +++ b/tests/diagnostics/missing-include-file.spire @@ -0,0 +1,4 @@ +//TEST:SIMPLE: +// trying to include a non-existant file + +#include "does-not-exist.h" diff --git a/tests/diagnostics/missing-include-file.spire.expected b/tests/diagnostics/missing-include-file.spire.expected new file mode 100644 index 000000000..24649c484 --- /dev/null +++ b/tests/diagnostics/missing-include-file.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/missing-include-file.spire(4): error 15300: failed to find include file 'does-not-exist.h' +} +standard output = { +} diff --git a/tests/diagnostics/parameter-already-defined.spire b/tests/diagnostics/parameter-already-defined.spire new file mode 100644 index 000000000..860b17e65 --- /dev/null +++ b/tests/diagnostics/parameter-already-defined.spire @@ -0,0 +1,4 @@ +//TEST:SIMPLE: +// re-use parameter name + +int foo( int a, float a ) { return 0; } diff --git a/tests/diagnostics/parameter-already-defined.spire.expected b/tests/diagnostics/parameter-already-defined.spire.expected new file mode 100644 index 000000000..0021afa42 --- /dev/null +++ b/tests/diagnostics/parameter-already-defined.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/parameter-already-defined.spire(4): error 30002: parameter 'a' already defined. +} +standard output = { +} diff --git a/tests/diagnostics/undefined-identifier.spire b/tests/diagnostics/undefined-identifier.spire new file mode 100644 index 000000000..6c5a59f75 --- /dev/null +++ b/tests/diagnostics/undefined-identifier.spire @@ -0,0 +1,7 @@ +//TEST:SIMPLE: +// use of undefined identifier + +void foo() +{ + int a = b; +} diff --git a/tests/diagnostics/undefined-identifier.spire.expected b/tests/diagnostics/undefined-identifier.spire.expected new file mode 100644 index 000000000..2eed77baf --- /dev/null +++ b/tests/diagnostics/undefined-identifier.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/undefined-identifier.spire(6): error 30015: undefined identifier 'b'. +} +standard output = { +} diff --git a/tests/diagnostics/variable-void-type.spire b/tests/diagnostics/variable-void-type.spire new file mode 100644 index 000000000..926e6401d --- /dev/null +++ b/tests/diagnostics/variable-void-type.spire @@ -0,0 +1,7 @@ +//TEST:SIMPLE: +// variable with `void` type + +void foo() +{ + void a; +} diff --git a/tests/diagnostics/variable-void-type.spire.expected b/tests/diagnostics/variable-void-type.spire.expected new file mode 100644 index 000000000..1f0e6765c --- /dev/null +++ b/tests/diagnostics/variable-void-type.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/variable-void-type.spire(6): error 30009: invalid type 'void'. +} +standard output = { +} diff --git a/tests/diagnostics/while-predicate-type.spire b/tests/diagnostics/while-predicate-type.spire new file mode 100644 index 000000000..14ce45533 --- /dev/null +++ b/tests/diagnostics/while-predicate-type.spire @@ -0,0 +1,10 @@ +//TEST:SIMPLE: +// bad type for `while` predicate + +struct S {}; + +void foo() +{ + S s; + while(s) {break;} +} diff --git a/tests/diagnostics/while-predicate-type.spire.expected b/tests/diagnostics/while-predicate-type.spire.expected new file mode 100644 index 000000000..9f94e679e --- /dev/null +++ b/tests/diagnostics/while-predicate-type.spire.expected @@ -0,0 +1,6 @@ +result code = -1 +standard error = { +Tests/Diagnostics/while-predicate-type.spire(9): error 30010: 'while': expression must evaluate to int. +} +standard output = { +} |
