Verifing that both the source number and line number get correctly reflected into error messages.
Note that this is distinct from existing testing of the proeprocessor, (in glcpp/tests), since here we are testing that the GLSL compiler itself is correctly handling those #line directives that are emitted by the preprocessor. --- src/glsl/tests/Makefile.am | 1 + src/glsl/tests/directives-test | 33 ++++++++++++++++++++ src/glsl/tests/directives/.gitignore | 1 + .../00-line-number-in-error-message.glsl | 8 +++++ .../00-line-number-in-error-message.glsl.expected | 2 ++ .../01-hash-line-number-in-error-message.glsl | 11 +++++++ ...hash-line-number-in-error-message.glsl.expected | 2 ++ .../directives/02-hash-line-number-increments.glsl | 13 ++++++++ .../02-hash-line-number-increments.glsl.expected | 2 ++ .../directives/03-hash-line-source-number.glsl | 11 +++++++ .../03-hash-line-source-number.glsl.expected | 2 ++ 11 files changed, 86 insertions(+) create mode 100755 src/glsl/tests/directives-test create mode 100644 src/glsl/tests/directives/.gitignore create mode 100644 src/glsl/tests/directives/00-line-number-in-error-message.glsl create mode 100644 src/glsl/tests/directives/00-line-number-in-error-message.glsl.expected create mode 100644 src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl create mode 100644 src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl.expected create mode 100644 src/glsl/tests/directives/02-hash-line-number-increments.glsl create mode 100644 src/glsl/tests/directives/02-hash-line-number-increments.glsl.expected create mode 100644 src/glsl/tests/directives/03-hash-line-source-number.glsl create mode 100644 src/glsl/tests/directives/03-hash-line-source-number.glsl.expected diff --git a/src/glsl/tests/Makefile.am b/src/glsl/tests/Makefile.am index 957bb55..5a6380d 100644 --- a/src/glsl/tests/Makefile.am +++ b/src/glsl/tests/Makefile.am @@ -9,6 +9,7 @@ TESTS_ENVIRONMENT= \ export PYTHON_FLAGS=$(PYTHON_FLAGS); TESTS = \ + directives-test \ optimization-test \ ralloc-test \ uniform-initializer-test diff --git a/src/glsl/tests/directives-test b/src/glsl/tests/directives-test new file mode 100755 index 0000000..9e33cf4 --- /dev/null +++ b/src/glsl/tests/directives-test @@ -0,0 +1,33 @@ +#!/bin/bash + +total=0 +pass=0 + +# These tests are for preprocessor directives that are emitted from +# the preprocessor itself (such as #line, #version, #extension, and +# #pragma) as opposed to those which are handled and removed by the +# preprocesor (such as #define, #ifdef, #if, #elid, #endif, etc.) + +echo "====== Testing preprocessor directives ======" +for test in directives/*.glsl; do + echo -n "Testing $test..." + ../builtin_compiler/builtin_compiler "$test" 2>&1 | grep -v "^Info log" > "$test.out" + total=$((total+1)) + if diff "$test.expected" "$test.out" >/dev/null 2>&1; then + echo "PASS" + pass=$((pass+1)) + else + echo "FAIL" + diff -u "$test.expected" "$test.out" + fi +done + +echo "" +echo "$pass/$total tests returned correct results" +echo "" + +if [[ $pass == $total ]]; then + exit 0 +else + exit 1 +fi diff --git a/src/glsl/tests/directives/.gitignore b/src/glsl/tests/directives/.gitignore new file mode 100644 index 0000000..f47cb20 --- /dev/null +++ b/src/glsl/tests/directives/.gitignore @@ -0,0 +1 @@ +*.out diff --git a/src/glsl/tests/directives/00-line-number-in-error-message.glsl b/src/glsl/tests/directives/00-line-number-in-error-message.glsl new file mode 100644 index 0000000..c994bb7 --- /dev/null +++ b/src/glsl/tests/directives/00-line-number-in-error-message.glsl @@ -0,0 +1,8 @@ +void main(void) +{ + /* Syntax error should be reported on source string 0, line 7. + * This is just a simple test of line numbers being tracked + * without any #line directives. + */ + if (; /* Syntax error on line 7 */ +} diff --git a/src/glsl/tests/directives/00-line-number-in-error-message.glsl.expected b/src/glsl/tests/directives/00-line-number-in-error-message.glsl.expected new file mode 100644 index 0000000..1251474 --- /dev/null +++ b/src/glsl/tests/directives/00-line-number-in-error-message.glsl.expected @@ -0,0 +1,2 @@ +0:7(6): error: syntax error, unexpected ';' + diff --git a/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl b/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl new file mode 100644 index 0000000..074669b --- /dev/null +++ b/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl @@ -0,0 +1,11 @@ +void main(void) +{ + + /* In this test, we verify that a #line directive causes the + * syntax error on the subsequent line to be reported against the + * line number in the #line directive, (so source 0, line 17). + */ + +#line 17 + if (; /* Syntax error on line 17 */ +} diff --git a/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl.expected b/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl.expected new file mode 100644 index 0000000..e64182d --- /dev/null +++ b/src/glsl/tests/directives/01-hash-line-number-in-error-message.glsl.expected @@ -0,0 +1,2 @@ +0:17(6): error: syntax error, unexpected ';' + diff --git a/src/glsl/tests/directives/02-hash-line-number-increments.glsl b/src/glsl/tests/directives/02-hash-line-number-increments.glsl new file mode 100644 index 0000000..eeca49e --- /dev/null +++ b/src/glsl/tests/directives/02-hash-line-number-increments.glsl @@ -0,0 +1,13 @@ +void main(void) +{ + + /* In this test, we verify that line numbers are correctly + * incremented following a #line directive. So the syntax + * error should be reported on source 0, line 21. + */ + +#line 19 + /* line 19 */ + /* line 20 */ + if (; /* Syntax error on line 21 */ +} diff --git a/src/glsl/tests/directives/02-hash-line-number-increments.glsl.expected b/src/glsl/tests/directives/02-hash-line-number-increments.glsl.expected new file mode 100644 index 0000000..673f99f --- /dev/null +++ b/src/glsl/tests/directives/02-hash-line-number-increments.glsl.expected @@ -0,0 +1,2 @@ +0:21(6): error: syntax error, unexpected ';' + diff --git a/src/glsl/tests/directives/03-hash-line-source-number.glsl b/src/glsl/tests/directives/03-hash-line-source-number.glsl new file mode 100644 index 0000000..fea94cf --- /dev/null +++ b/src/glsl/tests/directives/03-hash-line-source-number.glsl @@ -0,0 +1,11 @@ +void main(void) +{ + + /* In this test, we verify that a source number in a #line + * directive is reflected in a subsequent error message. + * Syntax error should be reported on line 3 of source 42. + */ + +#line 3 42 + if (; /* Syntax error on line 3 of source 42 */ +} diff --git a/src/glsl/tests/directives/03-hash-line-source-number.glsl.expected b/src/glsl/tests/directives/03-hash-line-source-number.glsl.expected new file mode 100644 index 0000000..f687b1f --- /dev/null +++ b/src/glsl/tests/directives/03-hash-line-source-number.glsl.expected @@ -0,0 +1,2 @@ +42:3(6): error: syntax error, unexpected ';' + -- 1.7.10 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev