Merge pull request #7792 from DougGregor/sr-4059-3.1

[3.1] [Type checker] Teach `areOverrideCompatibleSimple()` to look at initializers
diff --git a/lib/Sema/TypeCheckDecl.cpp b/lib/Sema/TypeCheckDecl.cpp
index 275dac3..473db29 100644
--- a/lib/Sema/TypeCheckDecl.cpp
+++ b/lib/Sema/TypeCheckDecl.cpp
@@ -5012,6 +5012,10 @@
         return false;
       if (!!func->getGenericParams() != !!parentFunc->getGenericParams())
         return false;
+    } else if (auto ctor = dyn_cast<ConstructorDecl>(decl)) {
+      auto parentCtor = cast<ConstructorDecl>(parentDecl);
+      if (!!ctor->getGenericParams() != !!parentCtor->getGenericParams())
+        return false;
     } else if (auto var = dyn_cast<VarDecl>(decl)) {
       auto parentVar = cast<VarDecl>(parentDecl);
       if (var->isStatic() != parentVar->isStatic())
diff --git a/validation-test/compiler_crashers_2_fixed/0078-sr4059.swift b/validation-test/compiler_crashers_2_fixed/0078-sr4059.swift
new file mode 100644
index 0000000..a073b13
--- /dev/null
+++ b/validation-test/compiler_crashers_2_fixed/0078-sr4059.swift
@@ -0,0 +1,9 @@
+// RUN: %target-swift-frontend %s -emit-ir
+
+class Base {
+  init<S: Sequence>(_ s: S) where S.Iterator.Element == UInt8 { }
+}
+
+class Sub: Base {
+  init(_ b: [UInt8]) { super.init(b) }
+}
\ No newline at end of file