[clang] Implement resource binding type prefix mismatch diagnostic infrastructure (PR #97103)

Damyan Pepper via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 19 17:53:59 PDT 2024


================
@@ -459,7 +468,413 @@ void SemaHLSL::handleResourceClassAttr(Decl *D, const ParsedAttr &AL) {
   D->addAttr(HLSLResourceClassAttr::Create(getASTContext(), RC, ArgLoc));
 }
 
-void SemaHLSL::handleResourceBindingAttr(Decl *D, const ParsedAttr &AL) {
+struct RegisterBindingFlags {
+  bool Resource = false;
+  bool UDT = false;
+  bool Other = false;
+  bool Basic = false;
+
+  bool SRV = false;
+  bool UAV = false;
+  bool CBV = false;
+  bool Sampler = false;
+
+  bool ContainsNumeric = false;
+  bool DefaultGlobals = false;
+};
+
+static bool isDeclaredWithinCOrTBuffer(const Decl *TheDecl) {
+  if (!TheDecl)
+    return false;
+
+  // Traverse up the parent contexts
+  const DeclContext *context = TheDecl->getDeclContext();
+  if (isa<HLSLBufferDecl>(context)) {
+    return true;
+  }
+
+  return false;
+}
+
+static CXXRecordDecl *getRecordDeclFromVarDecl(VarDecl *VD) {
----------------
damyanp wrote:

Just looking at this function, I can't figure out what it is meant to do.  The name is `getRecordDeclFromVarDecl`, but it has a bunch of asserts in it talking about resource classes and resource type declarations.  It seems to be something more resource-specific that just generally finding a record decl?  Or are the assert messages more specific than they should be?

This could be resolved by thinking about the name of the function, or perhaps writing a comment above it trying to explain what it does.

https://github.com/llvm/llvm-project/pull/97103


More information about the cfe-commits mailing list