summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-23 20:45:59 -0700
committerGitHub <noreply@github.com>2024-10-24 11:45:59 +0800
commitee709cffe520df3cf082dc7923609c42dd14cabc (patch)
tree99aacd40cb9e1d80e5c654620e6fe43182768376
parent61aa670237e2d51f7144322bf56b8ce3633c2db9 (diff)
Fix language server crash. (#5395)
-rw-r--r--source/slang/slang-check-decl.cpp7
-rw-r--r--tests/language-server/robustness-8.slang8
2 files changed, 15 insertions, 0 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index 781a3a237..8030bcf97 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -7861,6 +7861,13 @@ namespace Slang
if (semantics)
semantics->ensureDecl(genericTypeConstraintDecl, DeclCheckState::ReadyForReference);
auto constraintDeclRef = astBuilder->getDirectDeclRef<GenericTypeConstraintDecl>(genericTypeConstraintDecl);
+ auto supType = getSup(astBuilder, constraintDeclRef);
+ if (!supType)
+ {
+ args.add(astBuilder->getErrorType());
+ shouldCache = false;
+ continue;
+ }
auto witness =
astBuilder->getDeclaredSubtypeWitness(
getSub(astBuilder, constraintDeclRef),
diff --git a/tests/language-server/robustness-8.slang b/tests/language-server/robustness-8.slang
new file mode 100644
index 000000000..84d6c8945
--- /dev/null
+++ b/tests/language-server/robustness-8.slang
@@ -0,0 +1,8 @@
+//TEST:LANG_SERVER(filecheck=CHECK):
+//
+__generic < T : struct> extension T
+{
+// CHECK: null
+//HOVER:7,32
+ __init(StructuredBuffer<T>) {}
+} \ No newline at end of file