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) {