From 8e3b4c875b44553257e5480e0801701089b63227 Mon Sep 17 00:00:00 2001 From: realvictorprm Date: Thu, 22 Nov 2018 15:08:25 +0100 Subject: [PATCH 1/9] Fix #5768 Corrected wrong formatted print of a trait member constraint Signed-off-by: realvictorprm --- src/fsharp/NicePrint.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index ef865b0afa..a5f79403b8 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -872,7 +872,7 @@ module private PrintTypes = | tys -> bracketL (layoutTypesWithInfoAndPrec denv env 2 (wordL (tagKeyword "or")) tys) tysL ^^ wordL (tagPunctuation ":") --- bracketL (stat ++ wordL (tagMember nm) ^^ wordL (tagPunctuation ":") --- - ((layoutTypesWithInfoAndPrec denv env 2 (wordL (tagPunctuation "*")) argtys --- wordL (tagPunctuation "->")) --- (layoutTypeWithInfo denv env rty))) + ((layoutTypesWithInfoAndPrec denv env 2 (wordL (tagPunctuation "*")) argtys --- wordL (tagPunctuation "->")) --- (layoutTypeWithInfoAndPrec denv env 4 rty))) /// Layout a unit expression From 759ec97324365a038a3b9546514539d9a17bf32b Mon Sep 17 00:00:00 2001 From: realvictorprm Date: Sat, 1 Dec 2018 12:21:25 +0100 Subject: [PATCH 2/9] Adding regression test. Signed-off-by: realvictorprm --- tests/fsharp/regression/5768/test.bsl | 5 +++++ tests/fsharp/regression/5768/test.fs | 22 ++++++++++++++++++++++ tests/fsharp/tests.fs | 16 ++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 tests/fsharp/regression/5768/test.bsl create mode 100644 tests/fsharp/regression/5768/test.fs diff --git a/tests/fsharp/regression/5768/test.bsl b/tests/fsharp/regression/5768/test.bsl new file mode 100644 index 0000000000..8f14a864da --- /dev/null +++ b/tests/fsharp/regression/5768/test.bsl @@ -0,0 +1,5 @@ +test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' + +test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' + +test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' \ No newline at end of file diff --git a/tests/fsharp/regression/5768/test.fs b/tests/fsharp/regression/5768/test.fs new file mode 100644 index 0000000000..b544ee5834 --- /dev/null +++ b/tests/fsharp/regression/5768/test.fs @@ -0,0 +1,22 @@ +module Something +type Tuple = + static member inline TupleMap ((a, b), _ : Tuple) = fun f -> (f a, f b) + static member inline TupleMap ((a, b, c), _ : Tuple) = fun f -> (f a, f b, f c) + static member inline TupleMap ((a, b, c, d), _ : Tuple) = fun f -> (f a, f b, f c, f d) + + static member inline Map f (x: 'Tin) : 'Tout = + let inline call_2 (a: ^a, b : ^b) = ((^a or ^b) : (static member TupleMap : ^b * _ -> ^t) (b, a)) + call_2 (Unchecked.defaultof, x) f + +type IOption<'T> = + abstract member Value : 'T + +let inline tupleMap f x = Tuple.Map f x + +let inline addOptionValues< ^value, ^options, ^values, 'item when + 'item :> IOption< ^value>> + (addUp : ^values -> ^value, sourceOptions : ^options) = + let getValue (i : 'item) = i.Value + let allValues : ^values = tupleMap getValue sourceOptions + let result : ^value = addUp allValues + result diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index d29f92e5e7..b945dff4a9 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -1737,6 +1737,22 @@ module RegressionTests = peverify cfg "test.exe" #endif +#if !FSHARP_SUITE_DRIVES_CORECLR_TESTS + [] + let ``5768`` () = + let cfg = testConfig "regression/5768" + let outFile = "test.out.bsl" + let expectedFile = "test.bsl" + + fscBothToOut cfg outFile "%s --nologo --target:library" cfg.fsc_flags ["test.fs"] + + let diff = fsdiff cfg outFile expectedFile + + match diff with + | "" -> () + | _ -> + Assert.Fail (sprintf "'%s' and '%s' differ; %A" (getfullpath cfg outFile) (getfullpath cfg expectedFile) diff) +#endif #if !FSHARP_SUITE_DRIVES_CORECLR_TESTS module OptimizationTests = From 1ca60569eaf5533c37eebae707790aea563ec7a2 Mon Sep 17 00:00:00 2001 From: realvictorprm Date: Sun, 2 Dec 2018 11:48:16 +0100 Subject: [PATCH 3/9] Fix test to expect an error. Signed-off-by: realvictorprm --- tests/fsharp/tests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index b945dff4a9..60d6b73e40 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -1744,7 +1744,7 @@ module RegressionTests = let outFile = "test.out.bsl" let expectedFile = "test.bsl" - fscBothToOut cfg outFile "%s --nologo --target:library" cfg.fsc_flags ["test.fs"] + fscAppendErrExpectFail cfg outFile "%s --nologo --target:library" cfg.fsc_flags ["test.fs"] let diff = fsdiff cfg outFile expectedFile From 2d34b07c8ad235709f42abcc474dfbbd264a89b1 Mon Sep 17 00:00:00 2001 From: realvictorprm Date: Sun, 30 Dec 2018 15:57:39 +0100 Subject: [PATCH 4/9] Apply review, move and add new test to typecheck\sigs. Signed-off-by: realvictorprm --- tests/fsharp/tests.fs | 19 +++---------------- .../test.bsl => typecheck/sigs/neg111.bsl} | 1 + .../5768/test.fs => typecheck/sigs/neg111.fs} | 0 3 files changed, 4 insertions(+), 16 deletions(-) rename tests/fsharp/{regression/5768/test.bsl => typecheck/sigs/neg111.bsl} (99%) rename tests/fsharp/{regression/5768/test.fs => typecheck/sigs/neg111.fs} (100%) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 60d6b73e40..681f7f3994 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -1737,22 +1737,6 @@ module RegressionTests = peverify cfg "test.exe" #endif -#if !FSHARP_SUITE_DRIVES_CORECLR_TESTS - [] - let ``5768`` () = - let cfg = testConfig "regression/5768" - let outFile = "test.out.bsl" - let expectedFile = "test.bsl" - - fscAppendErrExpectFail cfg outFile "%s --nologo --target:library" cfg.fsc_flags ["test.fs"] - - let diff = fsdiff cfg outFile expectedFile - - match diff with - | "" -> () - | _ -> - Assert.Fail (sprintf "'%s' and '%s' differ; %A" (getfullpath cfg outFile) (getfullpath cfg expectedFile) diff) -#endif #if !FSHARP_SUITE_DRIVES_CORECLR_TESTS module OptimizationTests = @@ -2426,6 +2410,9 @@ module TypecheckTests = [] let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110" + [] + let ``type check neg111`` () = singleNegTest (testConfig "typecheck/sigs") "neg111" + [] let ``type check neg_issue_3752`` () = singleNegTest (testConfig "typecheck/sigs") "neg_issue_3752" diff --git a/tests/fsharp/regression/5768/test.bsl b/tests/fsharp/typecheck/sigs/neg111.bsl similarity index 99% rename from tests/fsharp/regression/5768/test.bsl rename to tests/fsharp/typecheck/sigs/neg111.bsl index 8f14a864da..f41d139d5e 100644 --- a/tests/fsharp/regression/5768/test.bsl +++ b/tests/fsharp/typecheck/sigs/neg111.bsl @@ -1,3 +1,4 @@ + test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' diff --git a/tests/fsharp/regression/5768/test.fs b/tests/fsharp/typecheck/sigs/neg111.fs similarity index 100% rename from tests/fsharp/regression/5768/test.fs rename to tests/fsharp/typecheck/sigs/neg111.fs From df423c83d7699085f410a8b110ef11e6476dc54e Mon Sep 17 00:00:00 2001 From: Abel Braaksma Date: Tue, 21 Jul 2020 17:07:19 +0200 Subject: [PATCH 5/9] Rename neg111 to neg112 to ease merging --- tests/fsharp/tests.fs | 2 +- tests/fsharp/typecheck/sigs/{neg111.bsl => neg112.bsl} | 0 tests/fsharp/typecheck/sigs/{neg111.fs => neg112.fs} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename tests/fsharp/typecheck/sigs/{neg111.bsl => neg112.bsl} (100%) rename tests/fsharp/typecheck/sigs/{neg111.fs => neg112.fs} (100%) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 4c02ca1322..fe44848c65 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -2467,7 +2467,7 @@ module TypecheckTests = let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110" [] - let ``type check neg111`` () = singleNegTest (testConfig "typecheck/sigs") "neg111" + let ``type check neg112`` () = singleNegTest (testConfig "typecheck/sigs") "neg112" [] let ``type check neg113`` () = singleNegTest (testConfig "typecheck/sigs") "neg113" diff --git a/tests/fsharp/typecheck/sigs/neg111.bsl b/tests/fsharp/typecheck/sigs/neg112.bsl similarity index 100% rename from tests/fsharp/typecheck/sigs/neg111.bsl rename to tests/fsharp/typecheck/sigs/neg112.bsl diff --git a/tests/fsharp/typecheck/sigs/neg111.fs b/tests/fsharp/typecheck/sigs/neg112.fs similarity index 100% rename from tests/fsharp/typecheck/sigs/neg111.fs rename to tests/fsharp/typecheck/sigs/neg112.fs From 6c2b3e67d1cf9f0f3b39572940d8e0293d750469 Mon Sep 17 00:00:00 2001 From: Abel Braaksma Date: Tue, 21 Jul 2020 20:43:22 +0200 Subject: [PATCH 6/9] Bring layoutReturnType into scope, and use instead of layoutTypeWithInfoAndPrec --- src/fsharp/NicePrint.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index 015ea2e4d2..e84a5ebcd2 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -892,7 +892,7 @@ module private PrintTypes = | tys -> bracketL (layoutTypesWithInfoAndPrec denv env 2 (wordL (tagKeyword "or")) tys) tysL ^^ wordL (tagPunctuation ":") --- bracketL (stat ++ wordL (tagMember nm) ^^ wordL (tagPunctuation ":") --- - ((layoutTypesWithInfoAndPrec denv env 2 (wordL (tagPunctuation "*")) argtys --- wordL (tagPunctuation "->")) --- (layoutTypeWithInfoAndPrec denv env 4 rty))) + ((layoutTypesWithInfoAndPrec denv env 2 (wordL (tagPunctuation "*")) argtys --- wordL (tagPunctuation "->")) --- (layoutReturnType denv env rty))) /// Layout a unit expression @@ -995,6 +995,8 @@ module private PrintTypes = and private layoutTypesWithInfoAndPrec denv env prec sep typl = sepListL sep (List.map (layoutTypeWithInfoAndPrec denv env prec) typl) + and private layoutReturnType denv env rty = layoutTypeWithInfoAndPrec denv env 4 rty + /// Layout a single type, taking TypeSimplificationInfo into account and private layoutTypeWithInfo denv env ty = layoutTypeWithInfoAndPrec denv env 5 ty @@ -1032,8 +1034,6 @@ module private PrintTypes = |> List.map (sepListL (wordL (tagPunctuation "*"))) allArgsL - let layoutReturnType denv env rty = layoutTypeWithInfoAndPrec denv env 4 rty - let layoutGenericParameterTypes denv env = function | [] -> emptyL From 634fe7c69eabce62bcf689c2e13c41bd35954b27 Mon Sep 17 00:00:00 2001 From: Abel Braaksma Date: Wed, 22 Jul 2020 01:07:42 +0200 Subject: [PATCH 7/9] Fix test neg112 to use proper directory --- tests/fsharp/tests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index a76d8feeed..adcb5fd743 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -2741,7 +2741,7 @@ module TypecheckTests = let ``type check neg111`` () = singleNegTest (testConfig' "typecheck/sigs") "neg111" [] - let ``type check neg112`` () = singleNegTest (testConfig "typecheck/sigs") "neg112" + let ``type check neg112`` () = singleNegTest (testConfig' "typecheck/sigs") "neg112" [] let ``type check neg113`` () = singleNegTest (testConfig' "typecheck/sigs") "neg113" From 0b27798890974feffd92397931963bab626a06f8 Mon Sep 17 00:00:00 2001 From: Abel Braaksma Date: Wed, 22 Jul 2020 01:08:57 +0200 Subject: [PATCH 8/9] Fix tests that suggest overloads to use parens around returned functions --- .../neg_known_return_type_and_known_type_arguments.bsl | 2 +- tests/fsharp/typecheck/sigs/neg117.bsl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/fsharp/typecheck/overloads/neg_known_return_type_and_known_type_arguments.bsl b/tests/fsharp/typecheck/overloads/neg_known_return_type_and_known_type_arguments.bsl index 6c9ef4772e..700fc0eb9f 100644 --- a/tests/fsharp/typecheck/overloads/neg_known_return_type_and_known_type_arguments.bsl +++ b/tests/fsharp/typecheck/overloads/neg_known_return_type_and_known_type_arguments.bsl @@ -8,7 +8,7 @@ Known type parameters: < MonoidSample , Zero > Available overloads: - static member Zero.Zero : ^t * Default1 -> ^t when ^t : (static member get_Zero : -> ^t) // Argument at index 1 doesn't match - static member Zero.Zero : ^t * Default1 -> ('a1 -> 'a1) when ^t : null and ^t : struct // Argument at index 1 doesn't match - - static member Zero.Zero : ^t * Default2 -> ^t when (FromInt32 or ^t) : (static member FromInt32 : ^t * FromInt32 -> int32 -> ^t) // Argument at index 1 doesn't match + - static member Zero.Zero : ^t * Default2 -> ^t when (FromInt32 or ^t) : (static member FromInt32 : ^t * FromInt32 -> (int32 -> ^t)) // Argument at index 1 doesn't match - static member Zero.Zero : ^t * Default2 -> ('a1 -> 'a1) when ^t : null and ^t : struct // Argument at index 1 doesn't match - static member Zero.Zero : ^t * Default3 -> ^t when ^t : (static member get_Empty : -> ^t) // Argument at index 1 doesn't match - static member Zero.Zero : 'a array * Zero -> 'a array // Argument at index 1 doesn't match diff --git a/tests/fsharp/typecheck/sigs/neg117.bsl b/tests/fsharp/typecheck/sigs/neg117.bsl index 9d0fdfb84e..9ad81d0003 100644 --- a/tests/fsharp/typecheck/sigs/neg117.bsl +++ b/tests/fsharp/typecheck/sigs/neg117.bsl @@ -6,5 +6,5 @@ Known return type: ('a -> Neg117.TargetA.M1 Microsoft.FSharp.Core.[]) Known type parameters: < Neg117.TargetA.M1 Microsoft.FSharp.Core.[] , Microsoft.FSharp.Core.obj , Neg117.Superpower.Transformer > Available overloads: - - static member Neg117.Superpower.Transformer.Transform : ^f * Neg117.TargetB.TargetB * Neg117.Superpower.Transformer -> (Neg117.TargetB.TransformerKind -> ^f) when (Neg117.TargetB.TargetB or ^f) : (static member Transform : ^f * Neg117.TargetB.TargetB -> Neg117.TargetB.TransformerKind -> ^f) // Argument at index 1 doesn't match - - static member Neg117.Superpower.Transformer.Transform : ^r * Neg117.TargetA.TargetA * Neg117.Superpower.Transformer -> (Neg117.TargetA.TransformerKind -> ^r) when (Neg117.TargetA.TargetA or ^r) : (static member Transform : ^r * Neg117.TargetA.TargetA -> Neg117.TargetA.TransformerKind -> ^r) // Argument at index 1 doesn't match + - static member Neg117.Superpower.Transformer.Transform : ^f * Neg117.TargetB.TargetB * Neg117.Superpower.Transformer -> (Neg117.TargetB.TransformerKind -> ^f) when (Neg117.TargetB.TargetB or ^f) : (static member Transform : ^f * Neg117.TargetB.TargetB -> (Neg117.TargetB.TransformerKind -> ^f)) // Argument at index 1 doesn't match + - static member Neg117.Superpower.Transformer.Transform : ^r * Neg117.TargetA.TargetA * Neg117.Superpower.Transformer -> (Neg117.TargetA.TransformerKind -> ^r) when (Neg117.TargetA.TargetA or ^r) : (static member Transform : ^r * Neg117.TargetA.TargetA -> (Neg117.TargetA.TransformerKind -> ^r)) // Argument at index 1 doesn't match From 43deb2ca252dd9275e22013c18f1730c7d83ec70 Mon Sep 17 00:00:00 2001 From: Abel Braaksma Date: Wed, 22 Jul 2020 02:58:11 +0200 Subject: [PATCH 9/9] Mention correct file and col numbers in new neg112 test --- tests/fsharp/typecheck/sigs/neg112.bsl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/fsharp/typecheck/sigs/neg112.bsl b/tests/fsharp/typecheck/sigs/neg112.bsl index f41d139d5e..68db38df09 100644 --- a/tests/fsharp/typecheck/sigs/neg112.bsl +++ b/tests/fsharp/typecheck/sigs/neg112.bsl @@ -1,6 +1,6 @@ -test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' +neg112.fs(20,49,20,62): typecheck error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' -test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' +neg112.fs(20,31,20,39): typecheck error FS0043: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' -test.fs(20,49): error FS0001: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))' \ No newline at end of file +neg112.fs(20,31,20,39): typecheck error FS0043: A type parameter is missing a constraint 'when (Tuple or ^options) : (static member TupleMap : ^options * Tuple -> (('item -> ^value) -> ^values))'