Merge pull request #21515 from nathawes/r46694149-cursor-info-crash-in-extractInlinableText
[sourcekitd][AST] Fix CursorInfo crash on method with unresolved default value
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index d30d070c..014d870 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -5101,6 +5101,14 @@
auto existing = DefaultValueAndFlags.getPointer()->StringRepresentation;
if (!existing.empty())
return existing;
+
+ if (!getDefaultValue()) {
+ // TypeChecker::checkDefaultArguments() nulls out the default value
+ // if it fails to type check it. This only seems to happen with an
+ // invalid/incomplete parameter list that contains a parameter with an
+ // unresolved default value.
+ return "<<empty>>";
+ }
return extractInlinableText(getASTContext().SourceMgr, getDefaultValue(),
scratch);
}
diff --git a/test/SourceKit/CursorInfo/undefined-default-value.swift b/test/SourceKit/CursorInfo/undefined-default-value.swift
new file mode 100644
index 0000000..9dde0d1
--- /dev/null
+++ b/test/SourceKit/CursorInfo/undefined-default-value.swift
@@ -0,0 +1,9 @@
+enum LogLevel { case error }
+
+func logAsync(level: LogLevel = undefined, messageProducer producer
+
+// RUN: %sourcekitd-test -req=cursor -pos=3:44 %s -- %s | %FileCheck %s
+
+// CHECK: source.lang.swift.decl.function.free (3:6-3:68)
+// CHECK: logAsync(level:messageProducer:)
+// CHECK: LogLevel</Type> = <<empty>>