From df5ece75f7e5a1720598bb4e8738abed595e5522 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 22 May 2018 08:32:02 +0200 Subject: [PATCH 1/3] Fix internal error when compiling interface implementation lacking an overloaded method implementation - fixes #4967 --- src/fsharp/MethodOverrides.fs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fsharp/MethodOverrides.fs b/src/fsharp/MethodOverrides.fs index 2ba55b7f75f..8a74567bde5 100644 --- a/src/fsharp/MethodOverrides.fs +++ b/src/fsharp/MethodOverrides.fs @@ -302,8 +302,7 @@ module DispatchSlotChecking = |> not if moreThanOnePossibleDispatchSlot then - // Error will be reported below in CheckOverridesAreAllUsedOnce - () + noimpl() elif argTys.Length <> vargtys.Length then fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectNumberOfArguments(FormatOverride denv overrideBy, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) From 4afa76e314b30d4162b0b044551501c8a0c094ed Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 22 May 2018 14:45:19 +0200 Subject: [PATCH 2/3] Adding a test --- .../OverloadingMembers/E_OverloadMismatch.fs | 14 ++++++++++++++ .../MemberDefinitions/OverloadingMembers/env.lst | 1 + 2 files changed, 15 insertions(+) create mode 100644 tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs new file mode 100644 index 00000000000..319a08cb243 --- /dev/null +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs @@ -0,0 +1,14 @@ +//No implementation was given for + +open System +open System.IO +type IFoo = + abstract member Foo : t:Type * r:TextReader -> obj + abstract member Foo<'t> : TextReader -> 't + + +type Foo() = + interface IFoo with + member x.Foo(t, reader) = obj() + +exit 1 diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst index 7a3e95f230e..a7384556634 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst @@ -29,6 +29,7 @@ NOMONO,NoMT SOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD= SOURCE=SlowOverloadResolution.fs # SlowOverloadResolution.fs SOURCE=E_OverloadCurriedFunc.fs # E_OverloadCurriedFunc.fs + SOURCE=E_OverloadMismatch.fs # E_OverloadMismatch.fs SOURCE=NoWarningWhenOverloadingInSubClass01.fs SCFLAGS="--warnaserror" # NoWarningWhenOverloadingInSubClass01.fs SOURCE=E_UnsolvableConstraints01.fs SCFLAGS="--test:ErrorRanges" # E_UnsolvableConstraints01.fs From 0976e3a94746765d367c0e9f1386fb673c1e6923 Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Tue, 22 May 2018 17:19:42 +0200 Subject: [PATCH 3/3] Update E_OverloadMismatch.fs --- .../MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs index 319a08cb243..6a110a839cc 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/E_OverloadMismatch.fs @@ -1,4 +1,4 @@ -//No implementation was given for +//No implementation was given for open System open System.IO