summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-overload.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-05-15 18:07:36 -0700
committerGitHub <noreply@github.com>2024-05-15 18:07:36 -0700
commit3b0de8b6ea484091146f61e663c63beeac5b4798 (patch)
tree8093bc0af8d0801435c29abf5c5f1fdd3e7cc09a /source/slang/slang-check-overload.cpp
parentcc88530a722cc2ce7a09f2a39dadeeb504e2f221 (diff)
Add diagnostic to prevent defining unsized variables. (#4168)
* Add diagnostic to prevent defining unsized static variables. * Fix tests. * Add more tests. * Fix to allow defining variables of link-time size. * update diagnostic message. * Fix tests. * Simplify code.
Diffstat (limited to 'source/slang/slang-check-overload.cpp')
-rw-r--r--source/slang/slang-check-overload.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index 6b51493e1..367c200cc 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -263,6 +263,14 @@ namespace Slang
//
bool success = true;
+ auto maybeReportGeneralError = [&]()
+ {
+ if (context.mode != OverloadResolveContext::Mode::JustTrying)
+ {
+ getSink()->diagnose(context.loc, Diagnostics::cannotSpecializeGeneric, candidate.item.declRef);
+ }
+ };
+
Index aa = 0;
for (auto memberRef : getMembers(m_astBuilder, genericDeclRef))
{
@@ -287,7 +295,10 @@ namespace Slang
// or this reference is ill-formed.
auto substType = typeParamRef.substitute(m_astBuilder, typeParamRef.getDecl()->initType.type);
if (!substType)
+ {
+ maybeReportGeneralError();
return false;
+ }
checkedArgs.add(substType);
continue;
}
@@ -355,7 +366,10 @@ namespace Slang
ConstantFoldingCircularityInfo newCircularityInfo(valParamRef.getDecl(), nullptr);
auto defaultVal = tryConstantFoldExpr(valParamRef.substitute(m_astBuilder, valParamRef.getDecl()->initExpr), ConstantFoldingKind::CompileTime, &newCircularityInfo);
if (!defaultVal)
+ {
+ maybeReportGeneralError();
return false;
+ }
checkedArgs.add(defaultVal);
continue;
}
@@ -475,8 +489,9 @@ namespace Slang
break;
case OverloadCandidate::Flavor::Generic:
- return TryCheckGenericOverloadCandidateTypes(context, candidate);
-
+ {
+ return TryCheckGenericOverloadCandidateTypes(context, candidate);
+ }
default:
SLANG_UNEXPECTED("unknown flavor of overload candidate");
break;