summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index c7e58a888..9325eda61 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -15,6 +15,7 @@
#include "slang-ast-decl.h"
#include "slang-ast-natural-layout.h"
#include "slang-ast-print.h"
+#include "slang-ast-support-types.h"
#include "slang-ast-synthesis.h"
#include "slang-lookup-spirv.h"
#include "slang-lookup.h"
@@ -4524,29 +4525,32 @@ void SemanticsExprVisitor::maybeCheckKnownBuiltinInvocation(Expr* invokeExpr)
auto knownBuiltinAttr = callee->findModifier<KnownBuiltinAttribute>();
if (!knownBuiltinAttr)
return;
- if (knownBuiltinAttr->name == "GetAttributeAtVertex")
+ if (auto constantIntVal = as<ConstantIntVal>(knownBuiltinAttr->name))
{
- if (checkedInvokeExpr->arguments.getCount() != 2)
- return;
- auto vertexAttributeArg = checkedInvokeExpr->arguments[0];
- auto vertexAttributeArgDeclRefExpr = as<DeclRefExpr>(vertexAttributeArg);
- if (!vertexAttributeArgDeclRefExpr)
+ if (constantIntVal->getValue() == (int)KnownBuiltinDeclName::GetAttributeAtVertex)
{
- getSink()->diagnose(
- invokeExpr,
- Diagnostics::getAttributeAtVertexMustReferToPerVertexInput);
- return;
- }
- auto vertexAttributeArgDecl = vertexAttributeArgDeclRefExpr->declRef.getDecl();
- if (!vertexAttributeArgDecl)
- return;
- if (!vertexAttributeArgDecl->findModifier<PerVertexModifier>() &&
- !vertexAttributeArgDecl->findModifier<HLSLNoInterpolationModifier>())
- {
- getSink()->diagnose(
- vertexAttributeArgDeclRefExpr,
- Diagnostics::getAttributeAtVertexMustReferToPerVertexInput);
- return;
+ if (checkedInvokeExpr->arguments.getCount() != 2)
+ return;
+ auto vertexAttributeArg = checkedInvokeExpr->arguments[0];
+ auto vertexAttributeArgDeclRefExpr = as<DeclRefExpr>(vertexAttributeArg);
+ if (!vertexAttributeArgDeclRefExpr)
+ {
+ getSink()->diagnose(
+ invokeExpr,
+ Diagnostics::getAttributeAtVertexMustReferToPerVertexInput);
+ return;
+ }
+ auto vertexAttributeArgDecl = vertexAttributeArgDeclRefExpr->declRef.getDecl();
+ if (!vertexAttributeArgDecl)
+ return;
+ if (!vertexAttributeArgDecl->findModifier<PerVertexModifier>() &&
+ !vertexAttributeArgDecl->findModifier<HLSLNoInterpolationModifier>())
+ {
+ getSink()->diagnose(
+ vertexAttributeArgDeclRefExpr,
+ Diagnostics::getAttributeAtVertexMustReferToPerVertexInput);
+ return;
+ }
}
}
}