diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2025-06-11 22:33:16 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-12 05:33:16 +0000 |
| commit | 7dad68f869502e5c0ab32c12cbf8db866e020713 (patch) | |
| tree | 1df62f9536639f06706bd1a14031c6d5b62f78a3 /source/slang/slang-ir-validate.cpp | |
| parent | c83a6d5b83a0b12f7029fd17fc8037beddb79834 (diff) | |
Fix intermittent debug failures with Debug build (#7369)
This PR replaces enable/disable style C function calls with C++ RAII style code.
In debug build, when an assertion failed in between enable and disable functions, an exception is thrown and the disable function is not called. RAII style code is safer for an exception
Diffstat (limited to 'source/slang/slang-ir-validate.cpp')
| -rw-r--r-- | source/slang/slang-ir-validate.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/source/slang/slang-ir-validate.cpp b/source/slang/slang-ir-validate.cpp index 565ae97d8..b3d6504ab 100644 --- a/source/slang/slang-ir-validate.cpp +++ b/source/slang/slang-ir-validate.cpp @@ -273,14 +273,19 @@ void validateIRInstOperands(IRValidateContext* context, IRInst* inst) } static thread_local bool _enableIRValidationAtInsert = false; -void disableIRValidationAtInsert() + +// RAII class implementation for exception-safe IR validation state management +IRValidationScope::IRValidationScope(bool enableValidation) + : m_previousState(_enableIRValidationAtInsert) { - _enableIRValidationAtInsert = false; + _enableIRValidationAtInsert = enableValidation; } -void enableIRValidationAtInsert() + +IRValidationScope::~IRValidationScope() { - _enableIRValidationAtInsert = true; + _enableIRValidationAtInsert = m_previousState; } + void validateIRInstOperands(IRInst* inst) { if (!_enableIRValidationAtInsert) |
