summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-modifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
-rw-r--r--source/slang/slang-check-modifier.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp
index ab34c83dd..21d7669ce 100644
--- a/source/slang/slang-check-modifier.cpp
+++ b/source/slang/slang-check-modifier.cpp
@@ -984,6 +984,37 @@ namespace Slang
return packOffsetModifier;
}
+ if(auto targetIntrinsic = as<TargetIntrinsicModifier>(m))
+ {
+ // TODO: verify that the predicate is one we understand
+ if(targetIntrinsic->scrutinee.name)
+ {
+ if(auto genDecl = as<ContainerDecl>(syntaxNode))
+ {
+ auto scrutineeResults = lookUp(
+ m_astBuilder,
+ this,
+ targetIntrinsic->scrutinee.name,
+ genDecl->ownedScope);
+ if(!scrutineeResults.isValid())
+ {
+ getSink()->diagnose(
+ targetIntrinsic->scrutinee.loc,
+ Diagnostics::undefinedIdentifier2,
+ targetIntrinsic->scrutinee.name);
+ }
+ if(scrutineeResults.isOverloaded())
+ {
+ getSink()->diagnose(
+ targetIntrinsic->scrutinee.loc,
+ Diagnostics::ambiguousReference,
+ targetIntrinsic->scrutinee.name);
+ }
+ targetIntrinsic->scrutineeDeclRef = scrutineeResults.item.declRef;
+ }
+ }
+ }
+
// Default behavior is to leave things as they are,
// and assume that modifiers are mostly already checked.
//