summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/modules/error-in-nested-import
diff options
context:
space:
mode:
authorT. Foley <tfoleyNV@users.noreply.github.com>2021-06-06 09:27:19 -0700
committerGitHub <noreply@github.com>2021-06-06 12:27:19 -0400
commit688d5fa6eb2c7f5281e50ace1401737479911ebc (patch)
treeffe07e09b6ec8e558bff9ed3e92e056dbdefbc42 /tests/language-feature/modules/error-in-nested-import
parent58d7af37f45f88130641188b1e39b00569acd575 (diff)
Include a "stack trace" with nested-import errors (#1872)
* Include a "stack trace" with nested-import errors When errors occur in nested `#include` files it is often helpful to have a "stack trace" / traceback of the `#include` chain that led from a root translation unit to the file with an error. This change implements a similar feature for `import`s. It is worth noting that `import`s don't really *require* this kind of compiler support the way `#include`s do because the intention is that the meaning of an `import`ed file does not depend on the order or nesting of `import`s. As such, when trying to *fix* an error in an `import`ed file, you usually don't care how it came to be `import`ed into your shaders. The use case here is somebody adapting a large body of Slang code to use in a different codebase, such that they have certain `.slang` files they don't actually intend to have compile correctly, and they want to be able to diagnose how they came to include those files when/if they cause problems. The actual feature implementation is pretty simple because we already track a stack of active `import`s so that we can detect and diagnose recursive `import`s. This change simply changes the disagnostics when there is an error in imported code so that instead of just noting the inner-most `import` site it lists all the `import` sites that were active at the time. The change includes a test case to confirm that the behavior works (at least for the case of a parse error). * fixup: test outputs Co-authored-by: Yong He <yonghe@outlook.com> Co-authored-by: jsmall-nvidia <jsmall@nvidia.com>
Diffstat (limited to 'tests/language-feature/modules/error-in-nested-import')
-rw-r--r--tests/language-feature/modules/error-in-nested-import/a.slang5
-rw-r--r--tests/language-feature/modules/error-in-nested-import/b.slang5
-rw-r--r--tests/language-feature/modules/error-in-nested-import/c.slang4
-rw-r--r--tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang7
-rw-r--r--tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang.expected18
5 files changed, 39 insertions, 0 deletions
diff --git a/tests/language-feature/modules/error-in-nested-import/a.slang b/tests/language-feature/modules/error-in-nested-import/a.slang
new file mode 100644
index 000000000..331b19bbb
--- /dev/null
+++ b/tests/language-feature/modules/error-in-nested-import/a.slang
@@ -0,0 +1,5 @@
+// a.slang
+//TEST_IGNORE_FILE:
+
+import b;
+
diff --git a/tests/language-feature/modules/error-in-nested-import/b.slang b/tests/language-feature/modules/error-in-nested-import/b.slang
new file mode 100644
index 000000000..1cfc37621
--- /dev/null
+++ b/tests/language-feature/modules/error-in-nested-import/b.slang
@@ -0,0 +1,5 @@
+// b.slang
+//TEST_IGNORE_FILE:
+
+import c;
+
diff --git a/tests/language-feature/modules/error-in-nested-import/c.slang b/tests/language-feature/modules/error-in-nested-import/c.slang
new file mode 100644
index 000000000..60feab7a1
--- /dev/null
+++ b/tests/language-feature/modules/error-in-nested-import/c.slang
@@ -0,0 +1,4 @@
+// c.slang
+//TEST_IGNORE_FILE:
+
+int a(;
diff --git a/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang b/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang
new file mode 100644
index 000000000..2efa69121
--- /dev/null
+++ b/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang
@@ -0,0 +1,7 @@
+// error-in-nested-import.slang
+//DIAGNOSTIC_TEST:SIMPLE:
+
+import a;
+
+int main()
+{} \ No newline at end of file
diff --git a/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang.expected b/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang.expected
new file mode 100644
index 000000000..d5c621ecd
--- /dev/null
+++ b/tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang.expected
@@ -0,0 +1,18 @@
+result code = -1
+standard error = {
+tests/language-feature/modules/error-in-nested-import/c.slang(4): error 20001: unexpected ';', expected identifier
+int a(;
+ ^
+tests/language-feature/modules/error-in-nested-import/b.slang(4): error 39999: import of module 'c' failed because of a compilation error
+import c;
+ ^
+tests/language-feature/modules/error-in-nested-import/a.slang(4): error 39999: import of module 'b' failed because of a compilation error
+import b;
+ ^
+tests/language-feature/modules/error-in-nested-import/error-in-nested-import.slang(4): error 39999: import of module 'a' failed because of a compilation error
+import a;
+ ^
+(0): fatal error 39999: compilation ceased
+}
+standard output = {
+}