diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 0651a6407e4..1e3401f7c23 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -6932,7 +6932,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors let haveCtor = Option.isSome inherits - let optOrigExprInfo, tpenv = + let optOrigExpr, tpenv = match optOrigExpr with | None -> None, tpenv | Some (origExpr, _) -> @@ -6940,10 +6940,9 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr | Some (_, _, mInherits, _, _) -> error(Error(FSComp.SR.tcInvalidRecordConstruction(), mInherits)) | None -> let olde, tpenv = TcExpr cenv overallTy env tpenv origExpr - let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy) - Some (olde, oldvaddr, oldvaddre), tpenv + Some (olde), tpenv - let hasOrigExpr = optOrigExprInfo.IsSome + let hasOrigExpr = optOrigExpr.IsSome let fldsList = let flds = @@ -6970,6 +6969,13 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr | Some v -> yield n, v | None -> () ] + let optOrigExprInfo = + match optOrigExpr with + | None -> None + | Some(olde) -> + let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy) + Some(olde, oldvaddr, oldvaddre) + if hasOrigExpr && not (isRecdTy cenv.g overallTy) then errorR(Error(FSComp.SR.tcExpressionFormRequiresRecordTypes(), mWholeExpr)) diff --git a/tests/fsharp/core/byrefs/test.fsx b/tests/fsharp/core/byrefs/test.fsx index 0eba848ec2f..5583cfa7c72 100644 --- a/tests/fsharp/core/byrefs/test.fsx +++ b/tests/fsharp/core/byrefs/test.fsx @@ -1491,7 +1491,15 @@ module ByrefReturnMemberTests = module OutRefToInRefClassMethod2 = type C() = static member f1 (x: inref<'T>) = 1 - let f2 (x: outref<'T>) = C.f1(&x) + let f2 (x: outref<'T>) = C.f1(&x) + + module TestStructRecord = + [] + type AnItem = + { Link: string } + + let link item = + { item with Link = "" } let aa = if !failures then (stdout.WriteLine "Test Failed"; exit 1)