Merge pull request #11765 from graydon/rdar-34111449-missing-case-in-SILOptimizer-dataflow-diagnostics
[SILOptimizer] Handle a missing case in DataflowDiagnostics.cpp
diff --git a/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp b/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
index 48ddf16..4ddd6bb 100644
--- a/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
+++ b/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
@@ -43,6 +43,8 @@
if (auto *FD = FLoc.getAsASTNode<FuncDecl>()) {
ResTy = FD->getResultInterfaceType();
+ } else if (auto *CD = FLoc.getAsASTNode<ConstructorDecl>()) {
+ ResTy = CD->getResultInterfaceType();
} else if (auto *CE = FLoc.getAsASTNode<ClosureExpr>()) {
ResTy = CE->getResultType();
} else {
diff --git a/test/SILOptimizer/return.swift b/test/SILOptimizer/return.swift
index 6fd7255..07105ca 100644
--- a/test/SILOptimizer/return.swift
+++ b/test/SILOptimizer/return.swift
@@ -94,6 +94,12 @@
}
} //expected-error {{missing return in a function expected to return 'Int'}}
+struct S {}
+extension S:ExpressibleByStringLiteral {
+ init!(stringLiteral:String) {
+ } // expected-error {{missing return in a function expected to return 'S!'}}
+}
+
func whileTrueLoop() -> Int {
var b = 1
while (true) {