diff options
Diffstat (limited to 'source/slang/slang-ir-missing-return.cpp')
| -rw-r--r-- | source/slang/slang-ir-missing-return.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/source/slang/slang-ir-missing-return.cpp b/source/slang/slang-ir-missing-return.cpp new file mode 100644 index 000000000..527fdda5f --- /dev/null +++ b/source/slang/slang-ir-missing-return.cpp @@ -0,0 +1,43 @@ +// ir-missing-return.cpp +#include "slang-ir-missing-return.h" + +#include "slang-ir.h" +#include "slang-ir-insts.h" + +namespace Slang { + +class DiagnosticSink; +struct IRModule; + +void checkForMissingReturnsRec( + IRInst* inst, + DiagnosticSink* sink) +{ + if( auto code = as<IRGlobalValueWithCode>(inst) ) + { + for( auto block : code->getBlocks() ) + { + auto terminator = block->getTerminator(); + + if( auto missingReturn = as<IRMissingReturn>(terminator) ) + { + sink->diagnose(missingReturn, Diagnostics::missingReturn); + } + } + } + + for( auto childInst : inst->getDecorationsAndChildren() ) + { + checkForMissingReturnsRec(childInst, sink); + } +} + +void checkForMissingReturns( + IRModule* module, + DiagnosticSink* sink) +{ + // Look for any `missingReturn` instructions + checkForMissingReturnsRec(module->getModuleInst(), sink); +} + +} |
