================ @@ -290,3 +294,295 @@ void SemaHLSL::DiagnoseAttrStageMismatch( << A << HLSLShaderAttr::ConvertShaderTypeToStr(Stage) << (AllowedStages.size() != 1) << join(StageStrings, ", "); } + +namespace { + +/// This class implements HLSL availability diagnostics for default +/// and relaxed mode +/// +/// The goal of this diagnostic is to emit an error or warning when an +/// unavailable API is found in a code that is reachable from the shader +/// entry function or from an exported function (when compiling shader +/// library). +/// +/// This is done by traversing the AST of all shader entry point functions +/// and of all exported functions, and any functions that are refrenced +/// from this AST. In other words, any function that are reachable from +/// the entry points. +class DiagnoseHLSLAvailability + : public RecursiveASTVisitor<DiagnoseHLSLAvailability> { + + Sema &SemaRef; + + // Stack of functions to be scaned + llvm::SmallVector<const FunctionDecl *, 8> DeclsToScan; + + // List of functions that were already scanned and in which environment. + // + // Maps FunctionDecl to a unsigned number that represents a set of shader ---------------- damyanp wrote:
```suggestion // Tracks which environments functions have been scanned in. // // Maps FunctionDecl to an unsigned number that represents the set of shader ``` Note that there is a case where a FunctionDecl can be mapped to "0", indicating that it hasn't been scanned in any environments. https://github.com/llvm/llvm-project/pull/92704 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits