diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/diagnostics/illegal-func-decl-module.slang | 26 | ||||
| -rw-r--r-- | tests/diagnostics/illegal-func-decl.slang | 58 |
2 files changed, 84 insertions, 0 deletions
diff --git a/tests/diagnostics/illegal-func-decl-module.slang b/tests/diagnostics/illegal-func-decl-module.slang new file mode 100644 index 000000000..97b66d129 --- /dev/null +++ b/tests/diagnostics/illegal-func-decl-module.slang @@ -0,0 +1,26 @@ +//TEST_IGNORE_FILE: + +export float libraryFunction(float a) +{ + a = a + a; + return a; +} + +export float libraryFunction1(inout float a) +{ + a = a * a; + return a; +} + +export float libraryFunction2(inout float a, in float b, out float c) +{ + a = a * a; + a = a + b; + return a; +} + +export float libraryFunction3(in float a) +{ + a = a + a; + return a; +} diff --git a/tests/diagnostics/illegal-func-decl.slang b/tests/diagnostics/illegal-func-decl.slang new file mode 100644 index 000000000..0ec73dc27 --- /dev/null +++ b/tests/diagnostics/illegal-func-decl.slang @@ -0,0 +1,58 @@ +// illegal-func-decl.slang + +// This test checks that the in/out/inout modifiers in function declarations must +// be consistent with the function's definition, and slang can diagnose the inconsistency. + +//TEST:COMPILE: tests/diagnostics/illegal-func-decl-module.slang -o tests/diagnostics/illegal-func-decl-module.slang-module + +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK1): -r tests/diagnostics/illegal-func-decl-module.slang-module -DTEST1 -target spirv -o illegal-func-decl.spv +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK2): -r tests/diagnostics/illegal-func-decl-module.slang-module -DTEST2 -target spirv -o illegal-func-decl.spv +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK3): -r tests/diagnostics/illegal-func-decl-module.slang-module -DTEST3 -target spirv -o illegal-func-decl.spv +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK4): -r tests/diagnostics/illegal-func-decl-module.slang-module -DTEST4 -target spirv -o illegal-func-decl.spv + +#ifdef TEST1 +// CHECK1: ([[# @LINE+1]]): error 45001: unresolved external symbol 'libraryFunction'. +extern float libraryFunction(inout float a); // invalid: 'a' is 'in' +#endif + +#ifdef TEST2 +// CHECK2-NOT: ([[# @LINE+1]]): error 45001: unresolved external symbol 'libraryFunction1'. +extern float libraryFunction1(inout float b); // valid +#endif + +#ifdef TEST3 +// CHECK3: ([[# @LINE+1]]): error 45001: unresolved external symbol 'libraryFunction2'. +extern float libraryFunction2(inout float a, in float b, float c); // valid: 'c' is 'inout' +#endif + +#ifdef TEST4 +// CHECK4-NOT: ([[# @LINE+1]]): error 45001: unresolved external symbol 'libraryFunction3'. +export float libraryFunction3(float a); // valid: 'in' is the default is not specified +#endif + +[shader("compute")] +[numthreads(1, 1, 1)] +void main(out float4 col : SV_Target0, bool isFrontHit) +{ + float a = 5; + float b = 7; + float c = 7; + +#ifdef TEST1 + col.x = libraryFunction(a); +#endif + +#ifdef TEST2 + col.y = libraryFunction1(b); +#endif + +#ifdef TEST3 + col.z = libraryFunction2(a, b, c); +#endif + +#ifdef TEST4 + col.w = libraryFunction3(a); +#endif +} + + |
