================ @@ -7367,6 +7367,75 @@ static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, return; } + VarDecl *VD = dyn_cast<VarDecl>(D); + HLSLBufferDecl *BD = dyn_cast<HLSLBufferDecl>(D); + + if (VD || BD) { + llvm::hlsl::ResourceClass RC; + std::string varTy = ""; + if (VD) { + + const Type *Ty = VD->getType()->getPointeeOrArrayElementType(); + if (!Ty) + return; + QualType t = ((ElaboratedType *)Ty)->getNamedType(); + const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl(); + if (!RD) + return; + + if (auto TDecl = dyn_cast<ClassTemplateSpecializationDecl>(RD)) + RD = TDecl->getSpecializedTemplate()->getTemplatedDecl(); + RD = RD->getCanonicalDecl(); + const auto *Attr = RD->getAttr<HLSLResourceAttr>(); + if (!Attr) + return; + + RC = Attr->getResourceClass(); + varTy = RD->getNameAsString(); + } else { + if (BD->isCBuffer()) { + RC = llvm::hlsl::ResourceClass::CBuffer; + varTy = "cbuffer"; + } else { + RC = llvm::hlsl::ResourceClass::CBuffer; + varTy = "tbuffer"; + } + } + switch (RC) { + case llvm::hlsl::ResourceClass::SRV: { + if (Slot.substr(0, 1) != "t") + S.Diag(ArgLoc, diag::err_hlsl_mismatching_register_type_and_name) + << Slot.substr(0, 1) << varTy << "t"; + break; + } + case llvm::hlsl::ResourceClass::UAV: { + if (Slot.substr(0, 1) != "u") + S.Diag(ArgLoc, diag::err_hlsl_mismatching_register_type_and_name) + << Slot.substr(0, 1) << varTy << "u"; + break; + } + case llvm::hlsl::ResourceClass::CBuffer: { + if (Slot.substr(0, 1) != "b") + S.Diag(ArgLoc, diag::err_hlsl_mismatching_register_type_and_name) + << Slot.substr(0, 1) << varTy << "b"; + break; + } + case llvm::hlsl::ResourceClass::Sampler: { + if (Slot.substr(0, 1) != "s") + S.Diag(ArgLoc, diag::err_hlsl_mismatching_register_type_and_name) + << Slot.substr(0, 1) << varTy << "s"; + break; + } + case llvm::hlsl::ResourceClass::Invalid: { + llvm_unreachable("Resource class should be valid."); + break; + } + + default: + break; + } ---------------- llvm-beanz wrote:
Or if we're covering all cases in the switch we should leave off the default case so that it produces a warning if we add a new resource class. https://github.com/llvm/llvm-project/pull/87578 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits