Skip to content

Commit 4f89b4c

Browse files
committed
update fix to include fix for 1306
1 parent 8b4230c commit 4f89b4c

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/fsharp/TypeChecker.fs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8464,11 +8464,13 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
84648464
let logicalCompiledName = ComputeLogicalName id memberFlags
84658465
let traitInfo = TTrait(argTys,logicalCompiledName,memberFlags,argTys,Some retTy, sln)
84668466

8467-
AddCxMethodConstraint env.DisplayEnv cenv.css mItem NoTrace traitInfo
8468-
84698467
let expr = Expr.Op(TOp.TraitCall(traitInfo), [], ves, mItem)
84708468
let expr = mkLambdas mItem [] vs (expr,retTy)
8471-
PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) (tyOfExpr cenv.g expr) ExprAtomicFlag.NonAtomic delayed
8469+
let resultExpr = PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) (tyOfExpr cenv.g expr) ExprAtomicFlag.NonAtomic delayed
8470+
// Add the constraint after the arguments have been checked to allow annotations to kick in on rigid type parameters
8471+
AddCxMethodConstraint env.DisplayEnv cenv.css mItem NoTrace traitInfo
8472+
resultExpr
8473+
84728474

84738475
| Item.DelegateCtor typ ->
84748476
match delayed with

tests/fsharp/core/members/ops/test.fsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,13 @@ module MiscOperatorOverloadTests =
345345
res
346346

347347

348+
// See https://github.com/Microsoft/visualfsharp/issues/1306
349+
module OperatorConstraintsWithExplicitRigidTypeParameters =
350+
type M() = class end
348351

352+
let inline empty< ^R when ( ^R or M) : (static member ( $ ) : ^R * M -> ^R)> =
353+
let m = M()
354+
Unchecked.defaultof< ^R> $ m: ^R
349355

350356
module EnumerationOperatorTests =
351357
let x1 : System.DateTimeKind = enum 3

0 commit comments

Comments
 (0)