Fix shader language preprocessor include marker handling #81381
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When the shader preprocessor handles include directives, it adds enter and exit markers to the shader code, like this:
The actual shader compiler tokenizer then handles these markers and pushes and pops line and file remapping (
include_positions
). These are used for better file and line number error reporting. However, in some specific circumstances the tokenizer can backtrack the current statement and process same code multiple times. In this case, it happens when an include is used inside a function code block immediately followed by an assignment. In that case, it also processes the include marker multiple times and makes the remapping stack unbalanced.This PR makes each include marker unique by also adding the file name after the
@@<
marker and only manipulates theinclude_positions
stack once per marker. This makes sure the stack stays balanced.