diff options
| author | T. Foley <tfoleyNV@users.noreply.github.com> | 2021-06-06 09:27:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-06 12:27:19 -0400 |
| commit | 688d5fa6eb2c7f5281e50ace1401737479911ebc (patch) | |
| tree | ffe07e09b6ec8e558bff9ed3e92e056dbdefbc42 /tests/bugs/import-with-error.slang.expected | |
| parent | 58d7af37f45f88130641188b1e39b00569acd575 (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/bugs/import-with-error.slang.expected')
| -rw-r--r-- | tests/bugs/import-with-error.slang.expected | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/tests/bugs/import-with-error.slang.expected b/tests/bugs/import-with-error.slang.expected index 86f34fc9f..8dbe7efbc 100644 --- a/tests/bugs/import-with-error.slang.expected +++ b/tests/bugs/import-with-error.slang.expected @@ -3,9 +3,10 @@ standard error = { tests/bugs/import-with-error-extra.slang(10): error 30015: undefined identifier 'b'. int a = b; ^ -tests/bugs/import-with-error.slang(6): fatal error 39999: error in imported module, compilation ceased. +tests/bugs/import-with-error.slang(6): error 39999: import of module 'import_with_error_extra' failed because of a compilation error import import_with_error_extra; ^~~~~~~~~~~~~~~~~~~~~~~ +(0): fatal error 39999: compilation ceased } standard output = { } |
