Issue 34896. Verify the superconstraint signature invoked by a mixin, not the mixin's one.

R=brianwilkerson@google.com, paulberry@google.com

Fixes: https://github.com/dart-lang/sdk/issues/34896
Change-Id: I778d572e2e2d0affb15c28d7bf2c1fbb58a8cd8a
Reviewed-on: https://dart-review.googlesource.com/c/81204
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index ed7fe2b..9f5eef9 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -4166,7 +4166,7 @@
       }
 
       FunctionType mixinMemberType =
-          _inheritanceManager.getMember(mixinType, nameObject);
+          _inheritanceManager.getMember(mixinType, nameObject, forSuper: true);
 
       if (mixinMemberType != null &&
           !_typeSystem.isOverrideSubtypeOf(superMemberType, mixinMemberType)) {
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index df7494a..ca8630a 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -902,6 +902,24 @@
     ]);
   }
 
+  test_error_mixinApplicationConcreteSuperInvokedMemberType_OK_method_overriddenInMixin() async {
+    addTestFile(r'''
+class A<T> {
+  void remove(T x) {}
+}
+
+mixin M<U> on A<U> {
+  void remove(Object x) {
+    super.remove(x as U);
+  }
+}
+
+class X<T> = A<T> with M<T>;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+  }
+
   test_error_mixinApplicationNoConcreteSuperInvokedMember_getter() async {
     addTestFile(r'''
 abstract class A {
diff --git a/tests/language_2/issue34896_test.dart b/tests/language_2/issue34896_test.dart
new file mode 100644
index 0000000..d7a0ea3
--- /dev/null
+++ b/tests/language_2/issue34896_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test: verify super-signatures of super-invoked methods of a
+// mixin against the superclass, not signatures in the mixin.
+
+class A<T> {
+  void remove(T x) {}
+}
+
+mixin M<U> on A<U> {
+  void remove(Object x) {
+    super.remove(x as U);
+  }
+}
+
+class X<T> = A<T> with M<T>;
+
+main() {}