diff --git a/.gitattributes b/.gitattributes
index 22ea220d8ff..4b531f310e2 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -9,6 +9,10 @@
*.fsproj text merge=union
*.dbproj text merge=union
+# Release notes are append-only unordered lists; union merge avoids conflicts
+# when multiple PRs each add an entry under the same heading.
+docs/release-notes/**/*.md text merge=union
+
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
diff --git a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md
index 0c36ee44218..d044c445388 100644
--- a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md
+++ b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md
@@ -1,5 +1,11 @@
### Fixed
+* Fix codegen to produce IL passing ILVerify: specialized stelem/ldelem for primitives, callvirt→call on value types, castclass at interface join points, filter→catch inside finally handlers, witness field alignment in state machine structs. ([PR #19372](https://github.com/dotnet/fsharp/pull/19372))
+* Fix outref parameter compiled as byref. (Issue [#13468](https://github.com/dotnet/fsharp/issues/13468), [PR #19340](https://github.com/dotnet/fsharp/pull/19340))
+* Fix static abstract interface members with byref params. (Issue [#18135](https://github.com/dotnet/fsharp/issues/18135), [PR #19340](https://github.com/dotnet/fsharp/pull/19340))
+* Fix object expressions in struct types no longer generate invalid IL with byref fields. (Issue [#19068](https://github.com/dotnet/fsharp/issues/19068), [PR #19339](https://github.com/dotnet/fsharp/pull/19339))
+* Avoid duplicate parameter names in closure constructors. (Issue [#17692](https://github.com/dotnet/fsharp/issues/17692), [PR #19339](https://github.com/dotnet/fsharp/pull/19339))
+* Improve let-rec codegen: reorder bindings to allocate lambda closures before non-lambda values that reference them. ([PR #19339](https://github.com/dotnet/fsharp/pull/19339))
* Fix `YieldFromFinal`/`ReturnFromFinal` being incorrectly called in non-tail positions (`for`, `use`, `use!`, `try/with` handler). ([Issue #19402](https://github.com/dotnet/fsharp/issues/19402), [PR #19403](https://github.com/dotnet/fsharp/pull/19403))
* Fixed how the source ranges of warn directives are reported (as trivia) in the parser output (by not reporting leading spaces). ([Issue #19405](https://github.com/dotnet/fsharp/issues/19405), [PR #19408]((https://github.com/dotnet/fsharp/pull/19408)))
diff --git a/docs/release-notes/.FSharp.Core/10.0.300.md b/docs/release-notes/.FSharp.Core/10.0.300.md
index fe9c39d742d..63321c19617 100644
--- a/docs/release-notes/.FSharp.Core/10.0.300.md
+++ b/docs/release-notes/.FSharp.Core/10.0.300.md
@@ -8,6 +8,7 @@
* Fix EvaluateQuotation to handle Sequential expressions, void method calls (unit return), and other patterns that were previously throwing NotSupportedException. Also properly handles unit-returning expressions by using Action delegates instead of Func delegates. ([Issue #19099](https://github.com/dotnet/fsharp/issues/19099))
* Fix query conditionals without else branch (if-then only) that were causing type mismatch errors. Now properly extracts element type from IQueryable for creating empty sequences. ([Issue #3445](https://github.com/dotnet/fsharp/issues/3445))
* Fix `Seq.empty` rendering as `"EmptyEnumerable"` in serializers by delegating to `System.Linq.Enumerable.Empty<'T>()` instead of using a custom DU type. ([Issue #17864](https://github.com/dotnet/fsharp/issues/17864), [PR #19317](https://github.com/dotnet/fsharp/pull/19317))
+* Ensure culture-independent parsing of .NET-style interpolated string holes. ([Issue #19367](https://github.com/dotnet/fsharp/issues/19367), [PR #19370](https://github.com/dotnet/fsharp/pull/19370))
### Added
diff --git a/docs/release-notes/.VisualStudio/18.vNext.md b/docs/release-notes/.VisualStudio/18.vNext.md
index 8e59087813c..a7a62a728f8 100644
--- a/docs/release-notes/.VisualStudio/18.vNext.md
+++ b/docs/release-notes/.VisualStudio/18.vNext.md
@@ -4,6 +4,7 @@
* Fixed Find All References crash when F# project contains non-F# files like `.cshtml`. ([Issue #16394](https://github.com/dotnet/fsharp/issues/16394), [PR #19252](https://github.com/dotnet/fsharp/pull/19252))
* Find All References for external DLL symbols now only searches projects that reference the specific assembly. ([Issue #10227](https://github.com/dotnet/fsharp/issues/10227), [PR #19252](https://github.com/dotnet/fsharp/pull/19252))
* Improve static compilation of state machines. ([PR #19297](https://github.com/dotnet/fsharp/pull/19297))
+* Make Alt+F1 (momentary toggle) work for inlay hints. ([PR #19421](https://github.com/dotnet/fsharp/pull/19421))
### Changed
diff --git a/eng/Version.Details.props b/eng/Version.Details.props
index 6f0666e4aa6..46e5e69f918 100644
--- a/eng/Version.Details.props
+++ b/eng/Version.Details.props
@@ -8,10 +8,10 @@ This file should be imported by eng/Versions.props
11.0.0-beta.26156.2
- 18.6.0-preview-26159-05
- 18.6.0-preview-26159-05
- 18.6.0-preview-26159-05
- 18.6.0-preview-26159-05
+ 18.6.0-preview-26162-01
+ 18.6.0-preview-26162-01
+ 18.6.0-preview-26162-01
+ 18.6.0-preview-26162-01
1.0.0-prerelease.26153.1
1.0.0-prerelease.26153.1
@@ -19,14 +19,14 @@ This file should be imported by eng/Versions.props
1.0.0-prerelease.26153.1
1.0.0-prerelease.26153.1
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
- 5.6.0-2.26157.2
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
+ 5.6.0-2.26162.12
10.0.2
10.0.2
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 0d87448ca5e..5a735be4b5c 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -1,54 +1,54 @@
-
+
-
+
https://github.com/dotnet/msbuild
- ef957b7daa9e0ea5339305953e2c1fdefeb8a14c
+ df3c977425e16a17b54b80ec687f312afea7ba81
-
+
https://github.com/dotnet/msbuild
- ef957b7daa9e0ea5339305953e2c1fdefeb8a14c
+ df3c977425e16a17b54b80ec687f312afea7ba81
-
+
https://github.com/dotnet/msbuild
- ef957b7daa9e0ea5339305953e2c1fdefeb8a14c
+ df3c977425e16a17b54b80ec687f312afea7ba81
-
+
https://github.com/dotnet/msbuild
- ef957b7daa9e0ea5339305953e2c1fdefeb8a14c
+ df3c977425e16a17b54b80ec687f312afea7ba81
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
-
+
https://github.com/dotnet/roslyn
- 43acf64dec4f26625357486891c73d97cf4ba695
+ f6f8bd575a37766c9c196dc825a236c57b812668
diff --git a/src/Compiler/AbstractIL/ilwrite.fs b/src/Compiler/AbstractIL/ilwrite.fs
index 40254a11965..7751a8d696b 100644
--- a/src/Compiler/AbstractIL/ilwrite.fs
+++ b/src/Compiler/AbstractIL/ilwrite.fs
@@ -446,16 +446,24 @@ type MethodDefKey(ilg:ILGlobals, tidx: int, garity: int, nm: string, retTy: ILTy
override _.Equals(obj: obj) =
match obj with
| :? MethodDefKey as y ->
- let compareILTypes o1 o2 =
+ let rec compareILTypes o1 o2 =
match o1, o2 with
- | ILType.Value v1, ILType.Value v2 -> v1.EqualsWithPrimaryScopeRef(ilg.primaryAssemblyScopeRef, v2 :> obj )
+ | ILType.Value v1, ILType.Value v2 -> v1.EqualsWithPrimaryScopeRef(ilg.primaryAssemblyScopeRef, v2 :> obj)
+ | ILType.Boxed v1, ILType.Boxed v2 -> v1.EqualsWithPrimaryScopeRef(ilg.primaryAssemblyScopeRef, v2 :> obj)
+ | ILType.Byref t1, ILType.Byref t2 -> compareILTypes t1 t2
+ | ILType.Ptr t1, ILType.Ptr t2 -> compareILTypes t1 t2
+ | ILType.Array(sh1, t1), ILType.Array(sh2, t2) -> sh1 = sh2 && compareILTypes t1 t2
+ | ILType.Modified(req1, tref1, t1), ILType.Modified(req2, tref2, t2) ->
+ req1 = req2
+ && tref1.EqualsWithPrimaryScopeRef(ilg.primaryAssemblyScopeRef, tref2 :> obj)
+ && compareILTypes t1 t2
| _ -> o1 = o2
tidx = y.TypeIdx &&
garity = y.GenericArity &&
nm = y.Name &&
- // note: these next two use structural equality on AbstractIL ILType values
- retTy = y.ReturnType && List.lengthsEqAndForall2 compareILTypes argTys y.ArgTypes &&
+ // note: these next two use scope-aware equality on AbstractIL ILType values
+ compareILTypes retTy y.ReturnType && List.lengthsEqAndForall2 compareILTypes argTys y.ArgTypes &&
isStatic = y.IsStatic
| _ -> false
@@ -1924,6 +1932,23 @@ module Codebuf =
| Unaligned2 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x2
| Unaligned4 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x4
+ let tryPrimitiveAsBasicType (ilg: ILGlobals) (ty: ILType) =
+ if isILBoolTy ilg ty then Some DT_U1
+ elif isILSByteTy ilg ty then Some DT_I1
+ elif isILByteTy ilg ty then Some DT_U1
+ elif isILCharTy ilg ty then Some DT_U2
+ elif isILInt16Ty ilg ty then Some DT_I2
+ elif isILUInt16Ty ilg ty then Some DT_U2
+ elif isILInt32Ty ilg ty then Some DT_I4
+ elif isILUInt32Ty ilg ty then Some DT_U4
+ elif isILInt64Ty ilg ty then Some DT_I8
+ elif isILUInt64Ty ilg ty then Some DT_U8
+ elif isILSingleTy ilg ty then Some DT_R4
+ elif isILDoubleTy ilg ty then Some DT_R8
+ elif isILIntPtrTy ilg ty then Some DT_I
+ elif isILUIntPtrTy ilg ty then Some DT_U
+ else None
+
let rec emitInstr cenv codebuf env instr =
match instr with
| si when isNoArgInstr si ->
@@ -2108,14 +2133,18 @@ module Codebuf =
| I_stelem_any (shape, ty) ->
if (shape = ILArrayShape.SingleDimensional) then
- emitTypeInstr cenv codebuf env i_stelem_any ty
+ match tryPrimitiveAsBasicType cenv.ilg ty with
+ | Some dt -> emitInstr cenv codebuf env (I_stelem dt)
+ | None -> emitTypeInstr cenv codebuf env i_stelem_any ty
else
let args = List.init (shape.Rank+1) (fun i -> if i < shape.Rank then cenv.ilg.typ_Int32 else ty)
emitMethodSpecInfoInstr cenv codebuf env i_call ("Set", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Void, None, [])
| I_ldelem_any (shape, ty) ->
if (shape = ILArrayShape.SingleDimensional) then
- emitTypeInstr cenv codebuf env i_ldelem_any ty
+ match tryPrimitiveAsBasicType cenv.ilg ty with
+ | Some dt -> emitInstr cenv codebuf env (I_ldelem dt)
+ | None -> emitTypeInstr cenv codebuf env i_ldelem_any ty
else
let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32)
emitMethodSpecInfoInstr cenv codebuf env i_call ("Get", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ty, None, [])
diff --git a/src/Compiler/CodeGen/EraseClosures.fs b/src/Compiler/CodeGen/EraseClosures.fs
index 6585fa1d661..930e6201bf8 100644
--- a/src/Compiler/CodeGen/EraseClosures.fs
+++ b/src/Compiler/CodeGen/EraseClosures.fs
@@ -6,6 +6,7 @@ open Internal.Utilities.Library
open FSharp.Compiler.AbstractIL.ILX.Types
open FSharp.Compiler.AbstractIL.Morphs
open FSharp.Compiler.AbstractIL.IL
+open FSharp.Compiler.IlxGenSupport
open FSharp.Compiler.Syntax.PrettyNaming
// --------------------------------------------------------------------
@@ -490,7 +491,9 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo =
let laterGenericParams = td.GenericParams @ addedGenParams
let selfFreeVar =
- mkILFreeVar (CompilerGeneratedName("self" + string nowFields.Length), true, nowCloSpec.ILType)
+ let baseName = CompilerGeneratedName("self" + string nowFields.Length)
+ let existingNames = nowFields |> Array.map (fun fv -> fv.fvName) |> Set.ofArray
+ mkILFreeVar (ChooseUniqueName baseName existingNames, true, nowCloSpec.ILType)
let laterFields = Array.append nowFields [| selfFreeVar |]
let laterCloRef = IlxClosureRef(laterTypeRef, laterStruct, laterFields)
@@ -612,7 +615,9 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo =
let laterGenericParams = td.GenericParams
// Number each argument left-to-right, adding one to account for the "this" pointer
let selfFreeVar =
- mkILFreeVar (CompilerGeneratedName "self", true, nowCloSpec.ILType)
+ let baseName = CompilerGeneratedName "self"
+ let existingNames = nowFields |> Array.map (fun fv -> fv.fvName) |> Set.ofArray
+ mkILFreeVar (ChooseUniqueName baseName existingNames, true, nowCloSpec.ILType)
let argToFreeVarMap =
(0, selfFreeVar)
diff --git a/src/Compiler/CodeGen/IlxGen.fs b/src/Compiler/CodeGen/IlxGen.fs
index 290bba23e4d..98733d8e4b1 100644
--- a/src/Compiler/CodeGen/IlxGen.fs
+++ b/src/Compiler/CodeGen/IlxGen.fs
@@ -101,29 +101,14 @@ let CheckCodeDoesSomething (code: ILCode) =
/// Choose the field names for variables captured by closures
let ChooseFreeVarNames takenNames ts =
- let tns = List.map (fun t -> (t, None)) ts
-
- let rec chooseName names (t, nOpt) =
- let tn =
- match nOpt with
- | None -> t
- | Some n -> t + string n
-
- if Zset.contains tn names then
- chooseName
- names
- (t,
- Some(
- match nOpt with
- | None -> 0
- | Some n -> (n + 1)
- ))
- else
- let names = Zset.add tn names
- tn, names
+ let initialSet = Set.ofList takenNames
+
+ let ts, _ =
+ (initialSet, ts)
+ ||> List.mapFold (fun taken baseName ->
+ let chosen = ChooseUniqueName baseName taken
+ chosen, Set.add chosen taken)
- let names = Zset.empty String.order |> Zset.addList takenNames
- let ts, _names = List.mapFold chooseName names tns
ts
/// We can't tailcall to methods taking byrefs. This helper helps search for them
@@ -605,6 +590,10 @@ let voidCheck m g permits ty =
[]
type DuFieldCoordinates = { CaseIdx: int; FieldIdx: int }
+/// Flags propagated from interface slot signatures to parameter metadata.
+[]
+type SlotParamFlags = { IsIn: bool; IsOut: bool }
+
/// Structure for maintaining field reuse across struct unions
type UnionFieldReuseMap = MultiMap
@@ -1162,6 +1151,9 @@ and sequel =
/// Branch to the given mark
| Br of Mark
+ /// Emit castclass to interface type then branch, ensuring correct merge type at join points (ECMA-335 III.1.8.1.3).
+ | CastThenBr of ILType * Mark
+
/// Execute the given comparison-then-branch instructions on the result of the expression
/// If the branch isn't taken then drop through.
| CmpThenBrOrContinue of Pops * ILInstr list
@@ -1245,6 +1237,9 @@ and IlxGenEnv =
/// Are we under the scope of a try, catch or finally? If so we can't tailcall. SEH = structured exception handling
withinSEH: bool
+ /// Suppresses filter block emission inside finally/fault handlers (workaround for dotnet/runtime#112406).
+ insideFinallyOrFaultHandler: bool
+
/// Are we inside of a recursive let binding, while loop, or a for loop?
isInLoop: bool
@@ -1496,7 +1491,12 @@ let GetMethodSpecForMemberVal cenv (memberInfo: ValMemberInfo) (vref: ValRef) =
mspec, mspecW, ctps, mtps, curriedArgInfos, paramInfos, retInfo, witnessInfos, methodArgTys, returnTy
else
let methodArgTys, paramInfos = List.unzip flatArgInfos
- let ilMethodArgTys = GenParamTypes cenv m tyenvUnderTypars false methodArgTys
+
+ let isSlotSig =
+ memberInfo.MemberFlags.IsDispatchSlot
+ || memberInfo.MemberFlags.IsOverrideOrExplicitImpl
+
+ let ilMethodArgTys = GenParamTypes cenv m tyenvUnderTypars isSlotSig methodArgTys
let ilMethodInst = GenTypeArgs cenv m tyenvUnderTypars (List.map mkTyparTy mtps)
let mspec =
@@ -2833,6 +2833,7 @@ let CodeGenThen (cenv: cenv) mgbuf (entryPointInfo, methodName, eenv, alreadyUse
cgbuf
{ eenv with
withinSEH = false
+ insideFinallyOrFaultHandler = false
liveLocals = IntMap.empty ()
innerVals = innerVals
}
@@ -3267,6 +3268,7 @@ and StringOfSequel sequel =
| Return -> "Return"
| EndLocalScope(sq, Mark k) -> "EndLocalScope(" + StringOfSequel sq + "," + formatCodeLabel k + ")"
| Br(Mark x) -> sprintf "Br L%s" (formatCodeLabel x)
+ | CastThenBr(_, Mark x) -> sprintf "CastThenBr L%s" (formatCodeLabel x)
| LeaveHandler _ -> "LeaveHandler"
| EndFilter -> "EndFilter"
@@ -3292,6 +3294,15 @@ and GenSequel cenv cloc cgbuf sequel =
CG.EmitInstr cgbuf (pop 0) Push0 (I_br x.CodeLabel)
+ | CastThenBr(ilTy, x) ->
+ CG.EmitInstr cgbuf (pop 1) (Push [ ilTy ]) (I_castclass ilTy)
+
+ if cgbuf.mgbuf.cenv.options.generateDebugSymbols then
+ cgbuf.EmitStartOfHiddenCode()
+ CG.EmitInstr cgbuf (pop 0) Push0 AI_nop
+
+ CG.EmitInstr cgbuf (pop 0) Push0 (I_br x.CodeLabel)
+
| LeaveHandler(isFinally, whereToSaveResultOpt, afterHandler, hasResult) ->
if hasResult then
if isFinally then
@@ -3498,7 +3509,6 @@ and GenLinearExpr cenv cgbuf eenv expr sequel preSteps (contf: FakeUnit -> FakeU
if preSteps && GenExprPreSteps cenv cgbuf eenv expr sequel then
contf Fake
else
-
// This case implemented here to get a guaranteed tailcall
// Make sure we generate the debug point outside the scope of the variable
let startMark, endMark as scopeMarks = StartDelayedLocalScope "let" cgbuf
@@ -3544,6 +3554,19 @@ and GenLinearExpr cenv cgbuf eenv expr sequel preSteps (contf: FakeUnit -> FakeU
let sequelOnBranches, afterJoin, stackAfterJoin, sequelAfterJoin =
GenJoinPoint cenv cgbuf "match" eenv ty m sequel
+ let sequelOnBranches =
+ match sequelOnBranches with
+ | Br mark when
+ isInterfaceTy cenv.g ty
+ && targets.Length > 1
+ && targets
+ |> Array.forall (fun (TTarget(_, body, _)) ->
+ let bodyTy = tyOfExpr cenv.g body
+ not (isStructTy cenv.g bodyTy) && not (isUnitTy cenv.g bodyTy))
+ ->
+ CastThenBr(GenType cenv m eenv.tyenv ty, mark)
+ | _ -> sequelOnBranches
+
// Stack: "stackAtTargets" is "stack prior to any match-testing" and also "stack at the start of each branch-RHS".
// match-testing (dtrees) should not contribute to the stack.
// Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point.
@@ -4422,9 +4445,12 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel =
let ilThisTy = GenType cenv m eenv.tyenv ty
I_callconstraint(useICallVirt, isTailCall, ilThisTy, mspec, None)
| _ ->
- if newobj then I_newobj(mspec, None)
- elif useICallVirt then I_callvirt(isTailCall, mspec, None)
- else I_call(isTailCall, mspec, None)
+ if newobj then
+ I_newobj(mspec, None)
+ elif useICallVirt && boxity <> AsValue then
+ I_callvirt(isTailCall, mspec, None)
+ else
+ I_call(isTailCall, mspec, None)
// ok, now we're ready to generate
if isSuperInit || isSelfInit then
@@ -4872,7 +4898,10 @@ and GenTryWith cenv cgbuf eenv (e1, valForFilter: Val, filterExpr, valForHandler
GenTry cenv cgbuf eenv scopeMarks (e1, m, resTy, spTry)
let seh =
- if cenv.options.generateFilterBlocks || eligibleForFilter cenv filterExpr then
+ if
+ not eenv.insideFinallyOrFaultHandler
+ && (cenv.options.generateFilterBlocks || eligibleForFilter cenv filterExpr)
+ then
let startOfFilter = CG.GenerateMark cgbuf "startOfFilter"
let afterFilter = CG.GenerateDelayMark cgbuf "afterFilter"
@@ -4993,7 +5022,13 @@ and GenTryFinally cenv cgbuf eenv (bodyExpr, handlerExpr, m, resTy, spTry, spFin
| DebugPointAtFinally.No -> ()
let exitSequel = LeaveHandler(true, whereToSaveOpt, afterHandler, true)
- GenExpr cenv cgbuf eenvinner handlerExpr exitSequel
+
+ let eenvHandler =
+ { eenvinner with
+ insideFinallyOrFaultHandler = true
+ }
+
+ GenExpr cenv cgbuf eenvHandler handlerExpr exitSequel
let endOfHandler = CG.GenerateMark cgbuf "endOfHandler"
let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel)
@@ -5501,7 +5536,7 @@ and GenILCall
let ilObjArgTy = GenType cenv m eenv.tyenv objArgTy
I_callconstraint(useICallVirt, tail, ilObjArgTy, ilMethSpec, None)
| None ->
- if useICallVirt then
+ if useICallVirt && not valu then
I_callvirt(tail, ilMethSpec, None)
else
I_call(tail, ilMethSpec, None)
@@ -6358,8 +6393,17 @@ and GenStructStateMachine cenv cgbuf eenvouter (res: LoweredStateMachine) sequel
CG.EmitInstr cgbuf (pop 0) (Push [ ilMachineAddrTy ]) (I_ldloca(uint16 locIdx))
CG.EmitInstr cgbuf (pop 1) (Push []) (I_stloc(uint16 locIdx2))
- // Initialize the closure variables
- for fv, ilv in Seq.zip cloFreeVars cloinfo.ilCloAllFreeVars do
+ // Initialize witness closure variables (these come first in ilCloAllFreeVars)
+ let nWitnesses = cloinfo.cloWitnessInfos.Length
+
+ for i in 0 .. nWitnesses - 1 do
+ let ilv = cloinfo.ilCloAllFreeVars.[i]
+ CG.EmitInstr cgbuf (pop 0) (Push [ ilMachineAddrTy ]) (I_ldloc(uint16 locIdx2))
+ GenWitnessArgFromWitnessInfo cenv cgbuf eenvouter m cloinfo.cloWitnessInfos.[i]
+ CG.EmitInstr cgbuf (pop 2) (Push []) (mkNormalStfld (mkILFieldSpecInTy (ilCloTy, ilv.fvName, ilv.fvType)))
+
+ // Initialize the regular closure variables (skip witness entries in ilCloAllFreeVars)
+ for fv, ilv in Seq.zip cloFreeVars (cloinfo.ilCloAllFreeVars |> Seq.skip nWitnesses) do
if stateVarsSet.Contains fv then
// zero-initialize the state var
if realloc then
@@ -6369,7 +6413,7 @@ and GenStructStateMachine cenv cgbuf eenvouter (res: LoweredStateMachine) sequel
else
// initialize the captured var
CG.EmitInstr cgbuf (pop 0) (Push [ ilMachineAddrTy ]) (I_ldloc(uint16 locIdx2))
- GenGetLocalVal cenv cgbuf eenvouter m fv None
+ GenGetFreeVarForClosure cenv cgbuf eenvouter m fv
CG.EmitInstr cgbuf (pop 2) (Push []) (mkNormalStfld (mkILFieldSpecInTy (ilCloTy, ilv.fvName, ilv.fvType)))
// Generate the start expression
@@ -6467,7 +6511,7 @@ and GenObjectExpr cenv cgbuf eenvouter objExpr (baseType, baseValOpt, basecall,
GenWitnessArgsFromWitnessInfos cenv cgbuf eenvouter m cloinfo.cloWitnessInfos
for fv in cloinfo.cloFreeVars do
- GenGetLocalVal cenv cgbuf eenvouter m fv None
+ GenGetFreeVarForClosure cenv cgbuf eenvouter m fv
CG.EmitInstr
cgbuf
@@ -6558,7 +6602,7 @@ and GenSequenceExpr
if stateVarsSet.Contains fv then
GenDefaultValue cenv cgbuf eenv (fv.Type, m)
else
- GenGetLocalVal cenv cgbuf eenv m fv None
+ GenGetFreeVarForClosure cenv cgbuf eenv m fv
CG.EmitInstr
cgbuf
@@ -6670,7 +6714,7 @@ and GenSequenceExpr
if stateVarsSet.Contains fv then
GenDefaultValue cenv cgbuf eenvouter (fv.Type, m)
else
- GenGetLocalVal cenv cgbuf eenvouter m fv None
+ GenGetFreeVarForClosure cenv cgbuf eenvouter m fv
CG.EmitInstr cgbuf (pop ilCloAllFreeVars.Length) (Push [ ilCloRetTyOuter ]) (I_newobj(ilxCloSpec.Constructor, None))
GenSequel cenv eenvouter.cloc cgbuf sequel
@@ -6903,7 +6947,9 @@ and GenClosureAlloc cenv (cgbuf: CodeGenBuffer) eenv (cloinfo, m) =
CG.EmitInstr cgbuf (pop 0) (Push [ EraseClosures.mkTyOfLambdas cenv.ilxPubCloEnv cloinfo.ilCloLambdas ]) (mkNormalLdsfld fspec)
else
GenWitnessArgsFromWitnessInfos cenv cgbuf eenv m cloinfo.cloWitnessInfos
- GenGetLocalVals cenv cgbuf eenv m cloinfo.cloFreeVars
+
+ for fv in cloinfo.cloFreeVars do
+ GenGetFreeVarForClosure cenv cgbuf eenv m fv
CG.EmitInstr
cgbuf
@@ -6918,6 +6964,12 @@ and GenLambda cenv cgbuf eenv isLocalTypeFunc thisVars expr sequel =
and GenTypeOfVal cenv eenv (v: Val) = GenType cenv v.Range eenv.tyenv v.Type
+and capturedTypeForFreeVar (g: TcGlobals) (fv: Val) =
+ if isByrefTy g fv.Type then
+ destByrefTy g fv.Type
+ else
+ fv.Type
+
and GenFreevar cenv m eenvouter tyenvinner (fv: Val) =
let g = cenv.g
@@ -6932,7 +6984,7 @@ and GenFreevar cenv m eenvouter tyenvinner (fv: Val) =
| Method _
| Null -> error (InternalError("GenFreevar: compiler error: unexpected unrealized value", fv.Range))
#endif
- | _ -> GenType cenv m tyenvinner fv.Type
+ | _ -> GenType cenv m tyenvinner (capturedTypeForFreeVar g fv)
and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) boxity eenv takenNames expr =
let g = cenv.g
@@ -7293,7 +7345,9 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod(slotsig, _attribs,
IlxClosureSpec.Create(IlxClosureRef(ilDelegeeTypeRef, ilCloLambdas, ilCloAllFreeVars), ctxtGenericArgsForDelegee, false)
GenWitnessArgsFromWitnessInfos cenv cgbuf eenvouter m cloWitnessInfos
- GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars
+
+ for fv in cloFreeVars do
+ GenGetFreeVarForClosure cenv cgbuf eenvouter m fv
CG.EmitInstr
cgbuf
@@ -7410,6 +7464,7 @@ and IsSequelImmediate sequel =
| Return
| ReturnVoid
| Br _
+ | CastThenBr _
| LeaveHandler _ -> true
| DiscardThen sequel -> IsSequelImmediate sequel
| _ -> false
@@ -7445,7 +7500,7 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel =
let pushed = GenType cenv m eenv.tyenv ty
let stackAfterJoin = (pushed :: cgbuf.GetCurrentStack())
let afterJoin = CG.GenerateDelayMark cgbuf (pos + "_join")
- // go to the join point
+
Br afterJoin, afterJoin, stackAfterJoin, sequel
// Accumulate the decision graph as we go
@@ -8223,6 +8278,17 @@ and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFi
GenExpr cenv cgbuf eenv e2 Continue
CG.EmitInstr cgbuf (pop 2) Push0 (mkNormalStfld (mkILFieldSpec (ilField.FieldRef, ilxCloSpec.ILType)))
+and isLambdaBinding (TBind(_, expr, _)) =
+ match stripDebugPoints expr with
+ | Expr.Lambda _
+ | Expr.TyLambda _
+ | Expr.Obj _ -> true
+ | _ -> false
+
+and reorderBindingsLambdasFirst binds =
+ let lambdas, nonLambdas = binds |> List.partition isLambdaBinding
+ lambdas @ nonLambdas
+
/// Generate letrec bindings
and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) (dict: Dictionary option) =
@@ -8316,8 +8382,11 @@ and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) (
let recursiveVars =
Zset.addList (bindsPossiblyRequiringFixup |> List.map (fun v -> v.Var)) (Zset.empty valOrder)
+ let reorderedBindsPossiblyRequiringFixup =
+ reorderBindingsLambdasFirst bindsPossiblyRequiringFixup
+
let _ =
- (recursiveVars, bindsPossiblyRequiringFixup)
+ (recursiveVars, reorderedBindsPossiblyRequiringFixup)
||> List.fold (fun forwardReferenceSet (bind: Binding) ->
// Compute fixups
bind.Expr
@@ -8361,6 +8430,8 @@ and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) (
let _ =
(recursiveVars, groupBinds)
||> List.fold (fun forwardReferenceSet (binds: Binding list) ->
+ let binds = reorderBindingsLambdasFirst binds
+
match dict, cenv.g.realsig, binds with
| _, false, _
| None, _, _
@@ -8397,8 +8468,11 @@ and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) (
and GenLetRec cenv cgbuf eenv (binds, body, m) sequel =
let _, endMark as scopeMarks = StartLocalScope "letrec" cgbuf
- let eenv = AllocStorageForBinds cenv cgbuf scopeMarks eenv binds
- GenLetRecBindings cenv cgbuf eenv (binds, m) None
+
+ let reorderedBinds = reorderBindingsLambdasFirst binds
+
+ let eenv = AllocStorageForBinds cenv cgbuf scopeMarks eenv reorderedBinds
+ GenLetRecBindings cenv cgbuf eenv (reorderedBinds, m) None
GenExpr cenv cgbuf eenv body (EndLocalScope(sequel, endMark))
//-------------------------------------------------------------------------
@@ -8992,6 +9066,7 @@ and GenParams
(argInfos: ArgReprInfo list)
methArgTys
(implValsOpt: Val list option)
+ (slotSigParamFlags: SlotParamFlags list option)
=
let g = cenv.g
let ilWitnessParams = GenWitnessParams cenv eenv m witnessInfos
@@ -9010,11 +9085,18 @@ and GenParams
| _ -> List.map (fun x -> x, None) ilArgTysAndInfos
let ilParams, _ =
- (Set.empty, List.zip methArgTys ilArgTysAndInfoAndVals)
- ||> List.mapFold (fun takenNames (methodArgTy, ((ilArgTy, topArgInfo), implValOpt)) ->
+ ((Set.empty, 0), List.zip methArgTys ilArgTysAndInfoAndVals)
+ ||> List.mapFold (fun (takenNames, paramIdx) (methodArgTy, ((ilArgTy, topArgInfo), implValOpt)) ->
let inFlag, outFlag, optionalFlag, defaultParamValue, Marshal, attribs =
GenParamAttribs cenv methodArgTy topArgInfo.Attribs
+ let inFlag, outFlag =
+ match slotSigParamFlags with
+ | Some flags when paramIdx < flags.Length ->
+ let slotFlags = flags[paramIdx]
+ (inFlag || slotFlags.IsIn, outFlag || slotFlags.IsOut)
+ | _ -> (inFlag, outFlag)
+
let idOpt =
match topArgInfo.Name with
| Some v -> Some v
@@ -9053,7 +9135,7 @@ and GenParams
MetadataIndex = NoMetadataIdx
}
- param, takenNames)
+ param, (takenNames, paramIdx + 1))
ilWitnessParams @ ilParams
@@ -9406,8 +9488,18 @@ and GenMethodForBinding
let ilTypars = GenGenericParams cenv eenvUnderMethLambdaTypars methLambdaTypars
+ let slotSigParamFlags =
+ match v.ImplementedSlotSigs with
+ | slotsig :: _ ->
+ let slotParams = slotsig.FormalParams |> List.concat
+
+ slotParams
+ |> List.map (fun (TSlotParam(_, _, inFlag, outFlag, _, _)) -> { IsIn = inFlag; IsOut = outFlag })
+ |> Some
+ | [] -> None
+
let ilParams =
- GenParams cenv eenvUnderMethTypeTypars m mspec witnessInfos paramInfos argTys (Some nonUnitNonSelfMethodVars)
+ GenParams cenv eenvUnderMethTypeTypars m mspec witnessInfos paramInfos argTys (Some nonUnitNonSelfMethodVars) slotSigParamFlags
let ilReturn =
GenReturnInfo cenv eenvUnderMethTypeTypars (Some returnTy) mspec.FormalReturnType retInfo
@@ -9864,11 +9956,17 @@ and GenGetStorageAndSequel (cenv: cenv) cgbuf eenv m (ty, ilTy) storage storeSeq
CommitGetStorageSequel cenv cgbuf eenv m ty None storeSequel
| Env(_, ilField, localCloInfo) ->
- CG.EmitInstrs cgbuf (pop 0) (Push [ ilTy ]) [ mkLdarg0; mkNormalLdfld ilField ]
+ CG.EmitInstrs cgbuf (pop 0) (Push [ ilField.ActualType ]) [ mkLdarg0; mkNormalLdfld ilField ]
CommitGetStorageSequel cenv cgbuf eenv m ty localCloInfo storeSequel
-and GenGetLocalVals cenv cgbuf eenvouter m fvs =
- List.iter (fun v -> GenGetLocalVal cenv cgbuf eenvouter m v None) fvs
+/// Load free variables for closure capture, dereferencing byrefs.
+and GenGetFreeVarForClosure cenv cgbuf eenv m (fv: Val) =
+ let g = cenv.g
+ GenGetLocalVal cenv cgbuf eenv m fv None
+
+ if isByrefTy g fv.Type then
+ let ilUnderlyingTy = GenType cenv m eenv.tyenv (capturedTypeForFreeVar g fv)
+ CG.EmitInstr cgbuf (pop 1) (Push [ ilUnderlyingTy ]) (mkNormalLdobj ilUnderlyingTy)
and GenGetLocalVal cenv cgbuf eenv m (vspec: Val) storeSequel =
GenGetStorageAndSequel cenv cgbuf eenv m (vspec.Type, GenTypeOfVal cenv eenv vspec) (StorageForVal m vspec eenv) storeSequel
@@ -10737,7 +10835,7 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) =
let ilReturn =
GenReturnInfo cenv eenvForMeth returnTy mspec.FormalReturnType retInfo
- let ilParams = GenParams cenv eenvForMeth m mspec [] argInfos methArgTys None
+ let ilParams = GenParams cenv eenvForMeth m mspec [] argInfos methArgTys None None
let compileAsInstance = ValRefIsCompiledAsInstanceMember g vref
@@ -12057,6 +12155,7 @@ let GetEmptyIlxGenEnv (g: TcGlobals) ccu =
innerVals = []
sigToImplRemapInfo = [] (* "module remap info" *)
withinSEH = false
+ insideFinallyOrFaultHandler = false
isInLoop = false
initLocals = true
imports = None
diff --git a/src/Compiler/CodeGen/IlxGenSupport.fs b/src/Compiler/CodeGen/IlxGenSupport.fs
index ad10af9f823..22c4388d59e 100644
--- a/src/Compiler/CodeGen/IlxGenSupport.fs
+++ b/src/Compiler/CodeGen/IlxGenSupport.fs
@@ -479,3 +479,20 @@ let GenReadOnlyModReqIfNecessary (g: TcGlobals) ty ilTy =
ILType.Modified(true, g.attrib_InAttribute.TypeRef, ilTy)
else
ilTy
+
+/// Given a base name and a set of existing names, produce a unique name.
+/// If baseName doesn't conflict, returns it as-is.
+/// Otherwise appends "0", "1", "2", etc. until a unique name is found.
+let ChooseUniqueName (baseName: string) (existingNames: Set) =
+ if not (Set.contains baseName existingNames) then
+ baseName
+ else
+ let rec findUnique n =
+ let candidate = baseName + string n
+
+ if Set.contains candidate existingNames then
+ findUnique (n + 1)
+ else
+ candidate
+
+ findUnique 0
diff --git a/src/Compiler/CodeGen/IlxGenSupport.fsi b/src/Compiler/CodeGen/IlxGenSupport.fsi
index fc46510706e..f0487ef6e57 100644
--- a/src/Compiler/CodeGen/IlxGenSupport.fsi
+++ b/src/Compiler/CodeGen/IlxGenSupport.fsi
@@ -25,3 +25,8 @@ val GetIsUnmanagedAttribute: g: TcGlobals -> ILAttribute
val GetNullableAttribute: g: TcGlobals -> nullnessInfos: TypedTree.NullnessInfo list -> ILAttribute
val GetNullableContextAttribute: g: TcGlobals -> byte -> ILAttribute
val GetNotNullWhenTrueAttribute: g: TcGlobals -> string array -> ILAttribute
+
+/// Given a base name and a set of existing names, produce a unique name.
+/// If baseName doesn't conflict, returns it as-is.
+/// Otherwise appends "0", "1", "2", etc. until a unique name is found.
+val ChooseUniqueName: baseName: string -> existingNames: Set -> string
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Closures.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Closures.fs
new file mode 100644
index 00000000000..1f8fb7840fe
--- /dev/null
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Closures.fs
@@ -0,0 +1,367 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace EmittedIL
+
+open Xunit
+open FSharp.Test
+open FSharp.Test.Compiler
+open FSharp.Test.Utilities
+
+module CodeGenRegressions_Closures =
+
+ let private getActualIL (result: CompilationResult) =
+ match result with
+ | CompilationResult.Success s ->
+ match s.OutputPath with
+ | Some p ->
+ let (_, _, actualIL) = ILChecker.verifyILAndReturnActual [] p [ "// dummy" ]
+ actualIL
+ | None -> failwith "No output path"
+ | _ -> failwith "Compilation failed"
+
+ // https://github.com/dotnet/fsharp/issues/19068
+ []
+ let ``Issue_19068_StructObjectExprByrefField`` () =
+ let source = """
+module Test
+
+type Class(test : obj) = class end
+
+[]
+type Struct(test : obj) =
+ member _.Test() = {
+ new Class(test) with
+ member _.ToString() = ""
+ }
+
+let run() =
+ let s = Struct("hello")
+ s.Test() |> ignore
+ printfn "Success"
+
+run()
+"""
+ FSharp source
+ |> asExe
+ |> ignoreWarnings
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/19068 — sequence expression path
+ []
+ let ``Issue_19068_StructSeqExprByrefCapture`` () =
+ let source = """
+module Test
+
+[]
+type StructSeq(items: obj[]) =
+ member _.GetItems() =
+ let arr = items
+ seq {
+ for item in arr do
+ yield item
+ }
+
+let s = StructSeq([| box 1; box "hello"; box 3.14 |])
+let result = s.GetItems() |> Seq.toArray
+if result.Length <> 3 then failwithf "Expected 3 items, got %d" result.Length
+if result.[0] :?> int <> 1 then failwith "First item wrong"
+if result.[1] :?> string <> "hello" then failwith "Second item wrong"
+printfn "Sequence expression test passed"
+"""
+ FSharp source
+ |> asExe
+ |> ignoreWarnings
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/19068 — delegate expression path
+ []
+ let ``Issue_19068_StructDelegateByrefCapture`` () =
+ let source = """
+module Test
+
+[]
+type StructDelegate(value: obj) =
+ member _.CreateAction() =
+ let v = value
+ System.Action(fun () -> printfn "Value: %A" v)
+
+let s = StructDelegate(box 42)
+let action = s.CreateAction()
+action.Invoke()
+printfn "Delegate expression test passed"
+"""
+ FSharp source
+ |> asExe
+ |> ignoreWarnings
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/19068 — closure/lambda path
+ []
+ let ``Issue_19068_StructClosureByrefCapture`` () =
+ let source = """
+module Test
+
+[]
+type StructClosure(value: obj) =
+ member _.GetValue() =
+ let v = value
+ let f = fun () -> v
+ f()
+
+let s = StructClosure(box "test")
+let result = s.GetValue()
+if result :?> string <> "test" then failwithf "Expected 'test', got '%A'" result
+printfn "Closure capture test passed"
+"""
+ FSharp source
+ |> asExe
+ |> ignoreWarnings
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/17692
+ []
+ let ``Issue_17692_MutualRecursionDuplicateParamName`` () =
+ let source = """
+module Test
+
+let rec caller x = callee (x - 1)
+and callee y = if y > 0 then caller y else 0
+
+let rec f1 a = f2 (a - 1) + f3 (a - 2)
+and f2 b = if b > 0 then f1 b else 1
+and f3 c = if c > 0 then f2 c else 2
+
+let result1 = caller 5
+let result2 = f1 5
+printfn "Results: %d %d" result1 result2
+"""
+ // Verify compilation and runtime
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/17692
+ // Verify IL closure constructors have unique parameter names
+ []
+ let ``Issue_17692_MutualRecursionNoDuplicateCtorParams`` () =
+ let source = """
+module Test
+
+let rec caller x = callee (x - 1)
+and callee y = if y > 0 then caller y else 0
+"""
+ let result =
+ FSharp source
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+
+ let actualIL = getActualIL result
+
+ // Find all .ctor methods and check for duplicate param names
+ let ctorPattern = System.Text.RegularExpressions.Regex(@"\.method.*\.ctor\(([^)]*)\)")
+ let paramPattern = System.Text.RegularExpressions.Regex(@"(\w+[\w@]*)\s+\w+")
+ for m in ctorPattern.Matches(actualIL) do
+ let paramStr = m.Groups.[1].Value
+ let paramNames =
+ [ for p in paramPattern.Matches(paramStr) -> p.Groups.[1].Value ]
+ |> List.filter (fun n -> n <> "class" && n <> "int32" && n <> "object" && n <> "string" && n <> "valuetype" && n <> "void" && n <> "bool")
+ let distinct = paramNames |> List.distinct
+ if paramNames.Length <> distinct.Length then
+ failwithf "Duplicate param names in .ctor: %A (from: %s)" paramNames paramStr
+
+ // let-rec lambda reordering: ensures closures are allocated before non-lambda bindings
+ []
+ let ``LetRec_MutRecInitOrder`` () =
+ let source = """
+module MutRecInitTest
+
+type Node = { Next: Node; Prev: Node; Value: int }
+
+let rec zero = { Next = zero; Prev = zero; Value = 0 }
+
+let rec one = { Next = two; Prev = two; Value = 1 }
+and two = { Next = one; Prev = one; Value = 2 }
+
+[]
+let main _ =
+ let zeroOk = obj.ReferenceEquals(zero.Next, zero) && obj.ReferenceEquals(zero.Prev, zero)
+ let oneNextOk = obj.ReferenceEquals(one.Next, two)
+ let onePrevOk = obj.ReferenceEquals(one.Prev, two)
+ let twoNextOk = obj.ReferenceEquals(two.Next, one)
+ let twoPrevOk = obj.ReferenceEquals(two.Prev, one)
+
+ if zeroOk && oneNextOk && onePrevOk && twoNextOk && twoPrevOk then
+ 0
+ else
+ failwith (sprintf "Mutual recursion initialization failed: zero=%b one.Next=%b one.Prev=%b two.Next=%b two.Prev=%b"
+ zeroOk oneNextOk onePrevOk twoNextOk twoPrevOk)
+"""
+ FSharp source
+ |> asExe
+ |> compileAndRun
+ |> shouldSucceed
+ |> ignore
+
+ // let-rec lambda reordering: ensures closures are allocated before non-lambda bindings
+ []
+ let ``LetRec_LetRecNonLambdaOrderPreserved`` () =
+ let source = """
+module Test
+
+#nowarn "40"
+#nowarn "22"
+
+[]
+type Node = { Value: int; GetLabel: unit -> string }
+
+let mutable log = []
+
+let test () =
+ let rec a = (log <- "a" :: log; { Value = 1; GetLabel = labelA })
+ and b = (log <- "b" :: log; { Value = 2; GetLabel = labelB })
+ and labelA () = sprintf "A(%d)" a.Value
+ and labelB () = sprintf "B(%d)" b.Value
+
+ // Non-lambda bindings 'a' and 'b' should keep their relative order
+ // (both come after lambdas labelA, labelB in the reordered list)
+ let reversedLog = log |> List.rev
+ if reversedLog <> ["a"; "b"] then
+ failwithf "Expected non-lambda order [a; b], got %A" reversedLog
+ if a.GetLabel() <> "A(1)" then failwithf "a.GetLabel() = %s" (a.GetLabel())
+ if b.GetLabel() <> "B(2)" then failwithf "b.GetLabel() = %s" (b.GetLabel())
+ printfn "Order preserved correctly"
+
+[]
+let main _ = test(); 0
+"""
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // let-rec lambda reordering: ensures closures are allocated before non-lambda bindings
+ []
+ let ``LetRec_LetRecLambdaDependsOnLambda`` () =
+ let source = """
+module Test
+
+let test () =
+ let rec f x = g (x - 1)
+ and g x = if x <= 0 then 0 else f x
+
+ let result = f 5
+ if result <> 0 then failwithf "Expected 0, got %d" result
+ printfn "Lambda-to-lambda: %d" result
+
+[]
+let main _ = test(); 0
+"""
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // let-rec lambda reordering: ensures closures are allocated before non-lambda bindings
+ []
+ let ``LetRec_DeepMixedMutualRecursion`` () =
+ let source = """
+module Test
+
+[]
+type Tree = { Label: string; Children: unit -> Tree list }
+
+let test () =
+ let rec root = { Label = "root"; Children = rootChildren }
+ and child1 = { Label = "child1"; Children = child1Children }
+ and child2 = { Label = "child2"; Children = fun () -> [root] }
+ and rootChildren () = [child1; child2]
+ and child1Children () = [child2]
+
+ if root.Label <> "root" then failwith "root label"
+ let kids = root.Children()
+ if kids.Length <> 2 then failwithf "Expected 2 children, got %d" kids.Length
+ if kids.[0].Label <> "child1" then failwith "child1 label"
+ if kids.[1].Label <> "child2" then failwith "child2 label"
+
+ let grandkids = kids.[0].Children()
+ if grandkids.Length <> 1 then failwithf "Expected 1 grandchild, got %d" grandkids.Length
+ if grandkids.[0].Label <> "child2" then failwith "grandchild label"
+
+ let backRef = kids.[1].Children()
+ if not (obj.ReferenceEquals(backRef.[0], root)) then failwith "back reference to root"
+
+ printfn "Deep mixed mutual recursion passed"
+
+[]
+let main _ = test(); 0
+"""
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // let-rec lambda reordering: ensures closures are allocated before non-lambda bindings
+ // Tests letrec lambda reordering: lambdas must be allocated before non-lambda bindings
+ // that reference them, to avoid null closure references in mutual recursion.
+ []
+ let ``LetRec_LetRecLambdaReordering`` () =
+ let source = """
+module Test
+
+[]
+type Node = { Value: int; GetLabel: unit -> string }
+
+let test () =
+ let rec a = { Value = 1; GetLabel = labelA }
+ and b = { Value = 2; GetLabel = labelB }
+ and labelA () = sprintf "A(%d)->B(%d)" a.Value b.Value
+ and labelB () = sprintf "B(%d)->A(%d)" b.Value a.Value
+
+ if a.GetLabel() <> "A(1)->B(2)" then failwithf "Expected A(1)->B(2), got %s" (a.GetLabel())
+ if b.GetLabel() <> "B(2)->A(1)" then failwithf "Expected B(2)->A(1), got %s" (b.GetLabel())
+ printfn "SUCCESS"
+
+[]
+let main _ =
+ test()
+ 0
+"""
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Signatures.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Signatures.fs
new file mode 100644
index 00000000000..f404e80efc6
--- /dev/null
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/CodeGenRegressions/CodeGenRegressions_Signatures.fs
@@ -0,0 +1,107 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace EmittedIL
+
+open Xunit
+open FSharp.Test
+open FSharp.Test.Compiler
+open FSharp.Test.Utilities
+
+module CodeGenRegressions_Signatures =
+
+ let private getActualIL (result: CompilationResult) =
+ match result with
+ | CompilationResult.Success s ->
+ match s.OutputPath with
+ | Some p ->
+ let (_, _, actualIL) = ILChecker.verifyILAndReturnActual [] p [ "// dummy" ]
+ actualIL
+ | None -> failwith "No output path"
+ | _ -> failwith "Compilation failed"
+
+ // https://github.com/dotnet/fsharp/issues/18135
+ []
+ let ``Issue_18135_StaticAbstractByrefParams`` () =
+ let source = """
+module Test
+
+#nowarn "3535"
+
+[]
+type I =
+ static abstract Foo: int inref -> int
+
+type T =
+ interface I with
+ static member Foo i = i
+
+let f<'T when 'T :> I>() =
+ let x = 123
+ printfn "%d" ('T.Foo &x)
+
+[]
+let main _ =
+ f()
+ 0
+"""
+ FSharp source
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
+ // https://github.com/dotnet/fsharp/issues/13468
+ []
+ let ``Issue_13468_OutrefAsByref_IL`` () =
+ let csCode = "namespace CSharpLib { public interface IOutTest { void TryGet(string k, out int v); } }"
+ let csLib = CSharp csCode |> withName "CSharpLib"
+ let fsCode = "module Test\nopen CSharpLib\ntype MyImpl() =\n interface IOutTest with\n member this.TryGet(k, v) = v <- 42"
+ let actualIL =
+ FSharp fsCode
+ |> withReferences [csLib]
+ |> asLibrary
+ |> compile
+ |> shouldSucceed
+ |> getActualIL
+ Assert.Contains("[out]", actualIL)
+
+ // https://github.com/dotnet/fsharp/issues/13468
+ []
+ let ``Issue_13468_OutrefAsByref_Runtime`` () =
+ let csCode = """
+namespace CSharpLib {
+ public interface IOutTest { bool TryGet(string k, out int v); }
+ public static class OutTestHelper {
+ public static string Run(IOutTest impl) {
+ int v;
+ bool ok = impl.TryGet("key", out v);
+ return ok ? v.ToString() : "fail";
+ }
+ }
+}"""
+ let csLib = CSharp csCode |> withName "CSharpLib"
+ let fsCode = """
+module Test
+open CSharpLib
+type MyImpl() =
+ interface IOutTest with
+ member this.TryGet(k, v) = v <- 42; true
+
+[]
+let main _ =
+ let result = OutTestHelper.Run(MyImpl())
+ if result <> "42" then failwithf "Expected 42, got %s" result
+ printfn "Success: %s" result
+ 0
+"""
+ FSharp fsCode
+ |> withReferences [csLib]
+ |> asExe
+ |> compile
+ |> shouldSucceed
+ |> run
+ |> shouldSucceed
+ |> ignore
+
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ComputedCollections/ForXInArray_ToArray.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ComputedCollections/ForXInArray_ToArray.fs.il.bsl
index f0ff9a65a6e..19ba4afb086 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ComputedCollections/ForXInArray_ToArray.fs.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ComputedCollections/ForXInArray_ToArray.fs.il.bsl
@@ -1679,32 +1679,32 @@
IL_000e: stloc.1
IL_000f: ldc.i4.0
IL_0010: stloc.2
- IL_0011: br.s IL_0027
+ IL_0011: br.s IL_0023
IL_0013: ldloc.1
IL_0014: ldloc.2
IL_0015: ldloc.0
IL_0016: ldloc.2
- IL_0017: ldelem [runtime]System.Boolean
- IL_001c: stloc.3
- IL_001d: ldloc.3
- IL_001e: brfalse.s IL_0020
+ IL_0017: ldelem.u1
+ IL_0018: stloc.3
+ IL_0019: ldloc.3
+ IL_001a: brfalse.s IL_001c
- IL_0020: ldc.i4.0
- IL_0021: nop
- IL_0022: stelem.i4
+ IL_001c: ldc.i4.0
+ IL_001d: nop
+ IL_001e: stelem.i4
+ IL_001f: ldloc.2
+ IL_0020: ldc.i4.1
+ IL_0021: add
+ IL_0022: stloc.2
IL_0023: ldloc.2
- IL_0024: ldc.i4.1
- IL_0025: add
- IL_0026: stloc.2
- IL_0027: ldloc.2
- IL_0028: ldloc.1
- IL_0029: ldlen
- IL_002a: conv.i4
- IL_002b: blt.s IL_0013
+ IL_0024: ldloc.1
+ IL_0025: ldlen
+ IL_0026: conv.i4
+ IL_0027: blt.s IL_0013
- IL_002d: ldloc.1
- IL_002e: ret
+ IL_0029: ldloc.1
+ IL_002a: ret
}
.method public static int32[] 'for true | _ in ...'() cil managed
@@ -1724,32 +1724,32 @@
IL_000e: stloc.1
IL_000f: ldc.i4.0
IL_0010: stloc.2
- IL_0011: br.s IL_0027
+ IL_0011: br.s IL_0023
IL_0013: ldloc.1
IL_0014: ldloc.2
IL_0015: ldloc.0
IL_0016: ldloc.2
- IL_0017: ldelem [runtime]System.Boolean
- IL_001c: stloc.3
- IL_001d: ldloc.3
- IL_001e: brfalse.s IL_0020
+ IL_0017: ldelem.u1
+ IL_0018: stloc.3
+ IL_0019: ldloc.3
+ IL_001a: brfalse.s IL_001c
- IL_0020: ldc.i4.0
- IL_0021: nop
- IL_0022: stelem.i4
+ IL_001c: ldc.i4.0
+ IL_001d: nop
+ IL_001e: stelem.i4
+ IL_001f: ldloc.2
+ IL_0020: ldc.i4.1
+ IL_0021: add
+ IL_0022: stloc.2
IL_0023: ldloc.2
- IL_0024: ldc.i4.1
- IL_0025: add
- IL_0026: stloc.2
- IL_0027: ldloc.2
- IL_0028: ldloc.1
- IL_0029: ldlen
- IL_002a: conv.i4
- IL_002b: blt.s IL_0013
+ IL_0024: ldloc.1
+ IL_0025: ldlen
+ IL_0026: conv.i4
+ IL_0027: blt.s IL_0013
- IL_002d: ldloc.1
- IL_002e: ret
+ IL_0029: ldloc.1
+ IL_002a: ret
}
.method public static int32[] 'for _ | true in ...'() cil managed
@@ -2340,4 +2340,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index a0af1067d16..d4e0e1c0c90 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -54,27 +44,27 @@
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
- IL_0004: br.s IL_0016
+ IL_0004: br.s IL_0012
IL_0006: ldarg.0
IL_0007: ldloc.1
- IL_0008: ldelem [runtime]System.Int32
- IL_000d: stloc.2
- IL_000e: ldloc.0
- IL_000f: ldloc.2
+ IL_0008: ldelem.i4
+ IL_0009: stloc.2
+ IL_000a: ldloc.0
+ IL_000b: ldloc.2
+ IL_000c: add
+ IL_000d: stloc.0
+ IL_000e: ldloc.1
+ IL_000f: ldc.i4.1
IL_0010: add
- IL_0011: stloc.0
+ IL_0011: stloc.1
IL_0012: ldloc.1
- IL_0013: ldc.i4.1
- IL_0014: add
- IL_0015: stloc.1
- IL_0016: ldloc.1
- IL_0017: ldarg.0
- IL_0018: ldlen
- IL_0019: conv.i4
- IL_001a: blt.s IL_0006
-
- IL_001c: ret
+ IL_0013: ldarg.0
+ IL_0014: ldlen
+ IL_0015: conv.i4
+ IL_0016: blt.s IL_0006
+
+ IL_0018: ret
}
}
@@ -96,4 +86,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index a0af1067d16..d4e0e1c0c90 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ForEachOnArray01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -54,27 +44,27 @@
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
- IL_0004: br.s IL_0016
+ IL_0004: br.s IL_0012
IL_0006: ldarg.0
IL_0007: ldloc.1
- IL_0008: ldelem [runtime]System.Int32
- IL_000d: stloc.2
- IL_000e: ldloc.0
- IL_000f: ldloc.2
+ IL_0008: ldelem.i4
+ IL_0009: stloc.2
+ IL_000a: ldloc.0
+ IL_000b: ldloc.2
+ IL_000c: add
+ IL_000d: stloc.0
+ IL_000e: ldloc.1
+ IL_000f: ldc.i4.1
IL_0010: add
- IL_0011: stloc.0
+ IL_0011: stloc.1
IL_0012: ldloc.1
- IL_0013: ldc.i4.1
- IL_0014: add
- IL_0015: stloc.1
- IL_0016: ldloc.1
- IL_0017: ldarg.0
- IL_0018: ldlen
- IL_0019: conv.i4
- IL_001a: blt.s IL_0006
-
- IL_001c: ret
+ IL_0013: ldarg.0
+ IL_0014: ldlen
+ IL_0015: conv.i4
+ IL_0016: blt.s IL_0006
+
+ IL_0018: ret
}
}
@@ -96,4 +86,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 6a5f1aabbdc..0d0b1ad1645 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -62,7 +52,7 @@
IL_000c: stloc.2
IL_000d: ldloc.2
IL_000e: ldloc.3
- IL_000f: blt.s IL_0027
+ IL_000f: blt.s IL_0023
IL_0011: ldloc.1
IL_0012: ldc.i4.1
@@ -71,19 +61,19 @@
IL_0015: ldloc.0
IL_0016: ldloc.1
IL_0017: ldloc.3
- IL_0018: stelem [runtime]System.Int32
+ IL_0018: stelem.i4
+ IL_0019: ldloc.3
+ IL_001a: ldc.i4.1
+ IL_001b: add
+ IL_001c: stloc.3
IL_001d: ldloc.3
- IL_001e: ldc.i4.1
- IL_001f: add
- IL_0020: stloc.3
- IL_0021: ldloc.3
- IL_0022: ldloc.2
- IL_0023: ldc.i4.1
- IL_0024: add
- IL_0025: bne.un.s IL_0011
-
- IL_0027: ldloc.0
- IL_0028: ret
+ IL_001e: ldloc.2
+ IL_001f: ldc.i4.1
+ IL_0020: add
+ IL_0021: bne.un.s IL_0011
+
+ IL_0023: ldloc.0
+ IL_0024: ret
}
}
@@ -105,4 +95,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index 6a5f1aabbdc..0d0b1ad1645 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NoAllocationOfTuple01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -62,7 +52,7 @@
IL_000c: stloc.2
IL_000d: ldloc.2
IL_000e: ldloc.3
- IL_000f: blt.s IL_0027
+ IL_000f: blt.s IL_0023
IL_0011: ldloc.1
IL_0012: ldc.i4.1
@@ -71,19 +61,19 @@
IL_0015: ldloc.0
IL_0016: ldloc.1
IL_0017: ldloc.3
- IL_0018: stelem [runtime]System.Int32
+ IL_0018: stelem.i4
+ IL_0019: ldloc.3
+ IL_001a: ldc.i4.1
+ IL_001b: add
+ IL_001c: stloc.3
IL_001d: ldloc.3
- IL_001e: ldc.i4.1
- IL_001f: add
- IL_0020: stloc.3
- IL_0021: ldloc.3
- IL_0022: ldloc.2
- IL_0023: ldc.i4.1
- IL_0024: add
- IL_0025: bne.un.s IL_0011
-
- IL_0027: ldloc.0
- IL_0028: ret
+ IL_001e: ldloc.2
+ IL_001f: ldc.i4.1
+ IL_0020: add
+ IL_0021: bne.un.s IL_0011
+
+ IL_0023: ldloc.0
+ IL_0024: ret
}
}
@@ -105,4 +95,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
index 0689c964faf..fa3fc55d025 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
@@ -123,47 +123,47 @@
IL_0040: stloc.2
IL_0041: ldloc.2
IL_0042: ldloc.3
- IL_0043: blt.s IL_0071
+ IL_0043: blt.s IL_0065
IL_0045: call int32[] assembly::get_r()
IL_004a: ldloc.3
IL_004b: call int32[] assembly::get_r()
IL_0050: ldloc.3
- IL_0051: ldelem [runtime]System.Int32
- IL_0056: call int32[] assembly::get_w()
+ IL_0051: ldelem.i4
+ IL_0052: call int32[] assembly::get_w()
+ IL_0057: ldloc.3
+ IL_0058: ldelem.i4
+ IL_0059: add
+ IL_005a: stelem.i4
IL_005b: ldloc.3
- IL_005c: ldelem [runtime]System.Int32
- IL_0061: add
- IL_0062: stelem [runtime]System.Int32
- IL_0067: ldloc.3
- IL_0068: ldc.i4.1
- IL_0069: add
- IL_006a: stloc.3
- IL_006b: ldloc.3
- IL_006c: ldloc.2
- IL_006d: ldc.i4.1
- IL_006e: add
- IL_006f: bne.un.s IL_0045
-
- IL_0071: nop
+ IL_005c: ldc.i4.1
+ IL_005d: add
+ IL_005e: stloc.3
+ IL_005f: ldloc.3
+ IL_0060: ldloc.2
+ IL_0061: ldc.i4.1
+ IL_0062: add
+ IL_0063: bne.un.s IL_0045
+
+ IL_0065: nop
+ IL_0066: nop
+ IL_0067: call int32[] assembly::get_r()
+ IL_006c: ldc.i4.0
+ IL_006d: ldelem.i4
+ IL_006e: ldc.i4.3
+ IL_006f: bne.un.s IL_0075
+
+ IL_0071: ldc.i4.0
IL_0072: nop
- IL_0073: call int32[] assembly::get_r()
- IL_0078: ldc.i4.0
- IL_0079: ldelem [runtime]System.Int32
- IL_007e: ldc.i4.3
- IL_007f: bne.un.s IL_0085
-
- IL_0081: ldc.i4.0
- IL_0082: nop
- IL_0083: br.s IL_0087
-
- IL_0085: ldc.i4.1
- IL_0086: nop
- IL_0087: stloc.s V_6
- IL_0089: ldloc.s V_6
- IL_008b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0090: pop
- IL_0091: ret
+ IL_0073: br.s IL_0077
+
+ IL_0075: ldc.i4.1
+ IL_0076: nop
+ IL_0077: stloc.s V_6
+ IL_0079: ldloc.s V_6
+ IL_007b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0080: pop
+ IL_0081: ret
}
}
@@ -172,4 +172,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 7e035bf8d61..fb46aa57c78 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -126,45 +116,45 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_0067
+ IL_0039: blt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: add
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: add
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: add
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: add
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0082: pop
- IL_0083: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0072: pop
+ IL_0073: ret
}
}
@@ -173,4 +163,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
index 813692fac56..5b4c53fb3c3 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
@@ -108,47 +108,47 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_0067
+ IL_0039: blt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: add
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: add
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: add
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: add
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: stloc.s V_4
- IL_007f: ldloc.s V_4
- IL_0081: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0086: pop
- IL_0087: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: stloc.s V_4
+ IL_006f: ldloc.s V_4
+ IL_0071: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0076: pop
+ IL_0077: ret
}
.property int32[] r()
@@ -185,4 +185,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index fd8662b1ca5..971a666a343 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -117,45 +107,45 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_0067
+ IL_0039: blt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: add
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: add
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: add
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: add
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0082: pop
- IL_0083: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0072: pop
+ IL_0073: ret
}
.property int32[] r()
@@ -192,4 +182,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
index b86ee2d4a2c..6d8aec750c0 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
@@ -123,47 +123,47 @@
IL_0040: stloc.2
IL_0041: ldloc.2
IL_0042: ldloc.3
- IL_0043: bgt.s IL_0071
+ IL_0043: bgt.s IL_0065
IL_0045: call int32[] assembly::get_r()
IL_004a: ldloc.3
IL_004b: call int32[] assembly::get_r()
IL_0050: ldloc.3
- IL_0051: ldelem [runtime]System.Int32
- IL_0056: call int32[] assembly::get_w()
+ IL_0051: ldelem.i4
+ IL_0052: call int32[] assembly::get_w()
+ IL_0057: ldloc.3
+ IL_0058: ldelem.i4
+ IL_0059: add
+ IL_005a: stelem.i4
IL_005b: ldloc.3
- IL_005c: ldelem [runtime]System.Int32
- IL_0061: add
- IL_0062: stelem [runtime]System.Int32
- IL_0067: ldloc.3
- IL_0068: ldc.i4.1
- IL_0069: sub
- IL_006a: stloc.3
- IL_006b: ldloc.3
- IL_006c: ldloc.2
- IL_006d: ldc.i4.1
- IL_006e: sub
- IL_006f: bne.un.s IL_0045
-
- IL_0071: nop
+ IL_005c: ldc.i4.1
+ IL_005d: sub
+ IL_005e: stloc.3
+ IL_005f: ldloc.3
+ IL_0060: ldloc.2
+ IL_0061: ldc.i4.1
+ IL_0062: sub
+ IL_0063: bne.un.s IL_0045
+
+ IL_0065: nop
+ IL_0066: nop
+ IL_0067: call int32[] assembly::get_r()
+ IL_006c: ldc.i4.0
+ IL_006d: ldelem.i4
+ IL_006e: ldc.i4.3
+ IL_006f: bne.un.s IL_0075
+
+ IL_0071: ldc.i4.0
IL_0072: nop
- IL_0073: call int32[] assembly::get_r()
- IL_0078: ldc.i4.0
- IL_0079: ldelem [runtime]System.Int32
- IL_007e: ldc.i4.3
- IL_007f: bne.un.s IL_0085
-
- IL_0081: ldc.i4.0
- IL_0082: nop
- IL_0083: br.s IL_0087
-
- IL_0085: ldc.i4.1
- IL_0086: nop
- IL_0087: stloc.s V_6
- IL_0089: ldloc.s V_6
- IL_008b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0090: pop
- IL_0091: ret
+ IL_0073: br.s IL_0077
+
+ IL_0075: ldc.i4.1
+ IL_0076: nop
+ IL_0077: stloc.s V_6
+ IL_0079: ldloc.s V_6
+ IL_007b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0080: pop
+ IL_0081: ret
}
}
@@ -172,4 +172,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 91f26499736..46991d7b3f7 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -124,45 +114,45 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: bgt.s IL_0067
+ IL_0039: bgt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: sub
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: sub
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: sub
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: sub
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0082: pop
- IL_0083: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0072: pop
+ IL_0073: ret
}
}
@@ -171,4 +161,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
index 860527ca19e..288641de0ff 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
@@ -108,47 +108,47 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: bgt.s IL_0067
+ IL_0039: bgt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: sub
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: sub
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: sub
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: sub
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: stloc.s V_4
- IL_007f: ldloc.s V_4
- IL_0081: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0086: pop
- IL_0087: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: stloc.s V_4
+ IL_006f: ldloc.s V_4
+ IL_0071: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0076: pop
+ IL_0077: ret
}
.property int32[] r()
@@ -185,4 +185,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index f89292af139..e636e439fa5 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -115,45 +105,45 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: bgt.s IL_0067
+ IL_0039: bgt.s IL_005b
IL_003b: call int32[] assembly::get_r()
IL_0040: ldloc.1
IL_0041: call int32[] assembly::get_r()
IL_0046: ldloc.1
- IL_0047: ldelem [runtime]System.Int32
- IL_004c: call int32[] assembly::get_w()
+ IL_0047: ldelem.i4
+ IL_0048: call int32[] assembly::get_w()
+ IL_004d: ldloc.1
+ IL_004e: ldelem.i4
+ IL_004f: add
+ IL_0050: stelem.i4
IL_0051: ldloc.1
- IL_0052: ldelem [runtime]System.Int32
- IL_0057: add
- IL_0058: stelem [runtime]System.Int32
- IL_005d: ldloc.1
- IL_005e: ldc.i4.1
- IL_005f: sub
- IL_0060: stloc.1
- IL_0061: ldloc.1
- IL_0062: ldloc.0
- IL_0063: ldc.i4.1
- IL_0064: sub
- IL_0065: bne.un.s IL_003b
-
- IL_0067: nop
+ IL_0052: ldc.i4.1
+ IL_0053: sub
+ IL_0054: stloc.1
+ IL_0055: ldloc.1
+ IL_0056: ldloc.0
+ IL_0057: ldc.i4.1
+ IL_0058: sub
+ IL_0059: bne.un.s IL_003b
+
+ IL_005b: nop
+ IL_005c: nop
+ IL_005d: call int32[] assembly::get_r()
+ IL_0062: ldc.i4.0
+ IL_0063: ldelem.i4
+ IL_0064: ldc.i4.3
+ IL_0065: bne.un.s IL_006b
+
+ IL_0067: ldc.i4.0
IL_0068: nop
- IL_0069: call int32[] assembly::get_r()
- IL_006e: ldc.i4.0
- IL_006f: ldelem [runtime]System.Int32
- IL_0074: ldc.i4.3
- IL_0075: bne.un.s IL_007b
-
- IL_0077: ldc.i4.0
- IL_0078: nop
- IL_0079: br.s IL_007d
-
- IL_007b: ldc.i4.1
- IL_007c: nop
- IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0082: pop
- IL_0083: ret
+ IL_0069: br.s IL_006d
+
+ IL_006b: ldc.i4.1
+ IL_006c: nop
+ IL_006d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_0072: pop
+ IL_0073: ret
}
.property int32[] r()
@@ -190,4 +180,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
index 1c526104b4f..cd3877d6b9e 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
@@ -173,7 +173,7 @@
IL_0080: ldloc.2
IL_0081: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0086: stloc.s V_10
- IL_0088: br.s IL_00c2
+ IL_0088: br.s IL_00b6
IL_008a: ldloc.2
IL_008b: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -182,39 +182,39 @@
IL_0097: ldloc.s V_11
IL_0099: call int32[] assembly::get_r()
IL_009e: ldloc.s V_11
- IL_00a0: ldelem [runtime]System.Int32
- IL_00a5: call int32[] assembly::get_w()
- IL_00aa: ldloc.s V_11
- IL_00ac: ldelem [runtime]System.Int32
- IL_00b1: add
- IL_00b2: stelem [runtime]System.Int32
- IL_00b7: ldloc.s V_10
- IL_00b9: stloc.2
- IL_00ba: ldloc.2
- IL_00bb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00c0: stloc.s V_10
- IL_00c2: ldloc.s V_10
- IL_00c4: brtrue.s IL_008a
-
- IL_00c6: nop
+ IL_00a0: ldelem.i4
+ IL_00a1: call int32[] assembly::get_w()
+ IL_00a6: ldloc.s V_11
+ IL_00a8: ldelem.i4
+ IL_00a9: add
+ IL_00aa: stelem.i4
+ IL_00ab: ldloc.s V_10
+ IL_00ad: stloc.2
+ IL_00ae: ldloc.2
+ IL_00af: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00b4: stloc.s V_10
+ IL_00b6: ldloc.s V_10
+ IL_00b8: brtrue.s IL_008a
+
+ IL_00ba: nop
+ IL_00bb: nop
+ IL_00bc: call int32[] assembly::get_r()
+ IL_00c1: ldc.i4.0
+ IL_00c2: ldelem.i4
+ IL_00c3: ldc.i4.3
+ IL_00c4: bne.un.s IL_00ca
+
+ IL_00c6: ldc.i4.0
IL_00c7: nop
- IL_00c8: call int32[] assembly::get_r()
- IL_00cd: ldc.i4.0
- IL_00ce: ldelem [runtime]System.Int32
- IL_00d3: ldc.i4.3
- IL_00d4: bne.un.s IL_00da
-
- IL_00d6: ldc.i4.0
- IL_00d7: nop
- IL_00d8: br.s IL_00dc
-
- IL_00da: ldc.i4.1
- IL_00db: nop
- IL_00dc: stloc.s V_12
- IL_00de: ldloc.s V_12
- IL_00e0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00e5: pop
- IL_00e6: ret
+ IL_00c8: br.s IL_00cc
+
+ IL_00ca: ldc.i4.1
+ IL_00cb: nop
+ IL_00cc: stloc.s V_12
+ IL_00ce: ldloc.s V_12
+ IL_00d0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00d5: pop
+ IL_00d6: ret
}
}
@@ -223,4 +223,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 618ba09189f..abe62238ce6 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -253,7 +243,7 @@
IL_008c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_0091: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0096: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$assembly::next@9
- IL_009b: br.s IL_00e3
+ IL_009b: br.s IL_00d7
IL_009d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_00a2: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -262,37 +252,37 @@
IL_00ad: ldloc.0
IL_00ae: call int32[] assembly::get_r()
IL_00b3: ldloc.0
- IL_00b4: ldelem [runtime]System.Int32
- IL_00b9: call int32[] assembly::get_w()
- IL_00be: ldloc.0
- IL_00bf: ldelem [runtime]System.Int32
- IL_00c4: add
- IL_00c5: stelem [runtime]System.Int32
- IL_00ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00cf: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00d4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
- IL_00d9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00de: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00e3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00e8: brtrue.s IL_009d
-
- IL_00ea: nop
+ IL_00b4: ldelem.i4
+ IL_00b5: call int32[] assembly::get_w()
+ IL_00ba: ldloc.0
+ IL_00bb: ldelem.i4
+ IL_00bc: add
+ IL_00bd: stelem.i4
+ IL_00be: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00c3: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00c8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
+ IL_00cd: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00d2: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00d7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00dc: brtrue.s IL_009d
+
+ IL_00de: nop
+ IL_00df: nop
+ IL_00e0: call int32[] assembly::get_r()
+ IL_00e5: ldc.i4.0
+ IL_00e6: ldelem.i4
+ IL_00e7: ldc.i4.3
+ IL_00e8: bne.un.s IL_00ee
+
+ IL_00ea: ldc.i4.0
IL_00eb: nop
- IL_00ec: call int32[] assembly::get_r()
- IL_00f1: ldc.i4.0
- IL_00f2: ldelem [runtime]System.Int32
- IL_00f7: ldc.i4.3
- IL_00f8: bne.un.s IL_00fe
-
- IL_00fa: ldc.i4.0
- IL_00fb: nop
- IL_00fc: br.s IL_0100
-
- IL_00fe: ldc.i4.1
- IL_00ff: nop
- IL_0100: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0105: pop
- IL_0106: ret
+ IL_00ec: br.s IL_00f0
+
+ IL_00ee: ldc.i4.1
+ IL_00ef: nop
+ IL_00f0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00f5: pop
+ IL_00f6: ret
}
}
@@ -301,4 +291,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
index c8c389a198a..9481d05f3c6 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
@@ -158,7 +158,7 @@
IL_0076: ldloc.0
IL_0077: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_007c: stloc.s V_8
- IL_007e: br.s IL_00b8
+ IL_007e: br.s IL_00ac
IL_0080: ldloc.0
IL_0081: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -167,39 +167,39 @@
IL_008d: ldloc.s V_9
IL_008f: call int32[] assembly::get_r()
IL_0094: ldloc.s V_9
- IL_0096: ldelem [runtime]System.Int32
- IL_009b: call int32[] assembly::get_w()
- IL_00a0: ldloc.s V_9
- IL_00a2: ldelem [runtime]System.Int32
- IL_00a7: add
- IL_00a8: stelem [runtime]System.Int32
- IL_00ad: ldloc.s V_8
- IL_00af: stloc.0
- IL_00b0: ldloc.0
- IL_00b1: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00b6: stloc.s V_8
- IL_00b8: ldloc.s V_8
- IL_00ba: brtrue.s IL_0080
-
- IL_00bc: nop
+ IL_0096: ldelem.i4
+ IL_0097: call int32[] assembly::get_w()
+ IL_009c: ldloc.s V_9
+ IL_009e: ldelem.i4
+ IL_009f: add
+ IL_00a0: stelem.i4
+ IL_00a1: ldloc.s V_8
+ IL_00a3: stloc.0
+ IL_00a4: ldloc.0
+ IL_00a5: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00aa: stloc.s V_8
+ IL_00ac: ldloc.s V_8
+ IL_00ae: brtrue.s IL_0080
+
+ IL_00b0: nop
+ IL_00b1: nop
+ IL_00b2: call int32[] assembly::get_r()
+ IL_00b7: ldc.i4.0
+ IL_00b8: ldelem.i4
+ IL_00b9: ldc.i4.3
+ IL_00ba: bne.un.s IL_00c0
+
+ IL_00bc: ldc.i4.0
IL_00bd: nop
- IL_00be: call int32[] assembly::get_r()
- IL_00c3: ldc.i4.0
- IL_00c4: ldelem [runtime]System.Int32
- IL_00c9: ldc.i4.3
- IL_00ca: bne.un.s IL_00d0
-
- IL_00cc: ldc.i4.0
- IL_00cd: nop
- IL_00ce: br.s IL_00d2
-
- IL_00d0: ldc.i4.1
- IL_00d1: nop
- IL_00d2: stloc.s V_10
- IL_00d4: ldloc.s V_10
- IL_00d6: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00db: pop
- IL_00dc: ret
+ IL_00be: br.s IL_00c2
+
+ IL_00c0: ldc.i4.1
+ IL_00c1: nop
+ IL_00c2: stloc.s V_10
+ IL_00c4: ldloc.s V_10
+ IL_00c6: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00cb: pop
+ IL_00cc: ret
}
.property int32[] r()
@@ -236,4 +236,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index 7838a9c7d69..5eaed2d4f19 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd03.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -220,7 +210,7 @@
IL_008c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_0091: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0096: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::next@9
- IL_009b: br.s IL_00e3
+ IL_009b: br.s IL_00d7
IL_009d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_00a2: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -229,37 +219,37 @@
IL_00ad: ldloc.0
IL_00ae: call int32[] assembly::get_r()
IL_00b3: ldloc.0
- IL_00b4: ldelem [runtime]System.Int32
- IL_00b9: call int32[] assembly::get_w()
- IL_00be: ldloc.0
- IL_00bf: ldelem [runtime]System.Int32
- IL_00c4: add
- IL_00c5: stelem [runtime]System.Int32
- IL_00ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00cf: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00d4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
- IL_00d9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00de: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00e3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00e8: brtrue.s IL_009d
-
- IL_00ea: nop
+ IL_00b4: ldelem.i4
+ IL_00b5: call int32[] assembly::get_w()
+ IL_00ba: ldloc.0
+ IL_00bb: ldelem.i4
+ IL_00bc: add
+ IL_00bd: stelem.i4
+ IL_00be: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00c3: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00c8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
+ IL_00cd: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00d2: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00d7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00dc: brtrue.s IL_009d
+
+ IL_00de: nop
+ IL_00df: nop
+ IL_00e0: call int32[] assembly::get_r()
+ IL_00e5: ldc.i4.0
+ IL_00e6: ldelem.i4
+ IL_00e7: ldc.i4.3
+ IL_00e8: bne.un.s IL_00ee
+
+ IL_00ea: ldc.i4.0
IL_00eb: nop
- IL_00ec: call int32[] assembly::get_r()
- IL_00f1: ldc.i4.0
- IL_00f2: ldelem [runtime]System.Int32
- IL_00f7: ldc.i4.3
- IL_00f8: bne.un.s IL_00fe
-
- IL_00fa: ldc.i4.0
- IL_00fb: nop
- IL_00fc: br.s IL_0100
-
- IL_00fe: ldc.i4.1
- IL_00ff: nop
- IL_0100: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0105: pop
- IL_0106: ret
+ IL_00ec: br.s IL_00f0
+
+ IL_00ee: ldc.i4.1
+ IL_00ef: nop
+ IL_00f0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00f5: pop
+ IL_00f6: ret
}
.property int32[] r()
@@ -320,4 +310,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
index 926e5db3845..b3846d77531 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
@@ -173,7 +173,7 @@
IL_0080: ldloc.2
IL_0081: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0086: stloc.s V_10
- IL_0088: br.s IL_00c2
+ IL_0088: br.s IL_00b6
IL_008a: ldloc.2
IL_008b: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -182,39 +182,39 @@
IL_0097: ldloc.s V_11
IL_0099: call int32[] assembly::get_r()
IL_009e: ldloc.s V_11
- IL_00a0: ldelem [runtime]System.Int32
- IL_00a5: call int32[] assembly::get_w()
- IL_00aa: ldloc.s V_11
- IL_00ac: ldelem [runtime]System.Int32
- IL_00b1: add
- IL_00b2: stelem [runtime]System.Int32
- IL_00b7: ldloc.s V_10
- IL_00b9: stloc.2
- IL_00ba: ldloc.2
- IL_00bb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00c0: stloc.s V_10
- IL_00c2: ldloc.s V_10
- IL_00c4: brtrue.s IL_008a
-
- IL_00c6: nop
+ IL_00a0: ldelem.i4
+ IL_00a1: call int32[] assembly::get_w()
+ IL_00a6: ldloc.s V_11
+ IL_00a8: ldelem.i4
+ IL_00a9: add
+ IL_00aa: stelem.i4
+ IL_00ab: ldloc.s V_10
+ IL_00ad: stloc.2
+ IL_00ae: ldloc.2
+ IL_00af: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00b4: stloc.s V_10
+ IL_00b6: ldloc.s V_10
+ IL_00b8: brtrue.s IL_008a
+
+ IL_00ba: nop
+ IL_00bb: nop
+ IL_00bc: call int32[] assembly::get_r()
+ IL_00c1: ldc.i4.0
+ IL_00c2: ldelem.i4
+ IL_00c3: ldc.i4.3
+ IL_00c4: bne.un.s IL_00ca
+
+ IL_00c6: ldc.i4.0
IL_00c7: nop
- IL_00c8: call int32[] assembly::get_r()
- IL_00cd: ldc.i4.0
- IL_00ce: ldelem [runtime]System.Int32
- IL_00d3: ldc.i4.3
- IL_00d4: bne.un.s IL_00da
-
- IL_00d6: ldc.i4.0
- IL_00d7: nop
- IL_00d8: br.s IL_00dc
-
- IL_00da: ldc.i4.1
- IL_00db: nop
- IL_00dc: stloc.s V_12
- IL_00de: ldloc.s V_12
- IL_00e0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00e5: pop
- IL_00e6: ret
+ IL_00c8: br.s IL_00cc
+
+ IL_00ca: ldc.i4.1
+ IL_00cb: nop
+ IL_00cc: stloc.s V_12
+ IL_00ce: ldloc.s V_12
+ IL_00d0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00d5: pop
+ IL_00d6: ret
}
}
@@ -223,4 +223,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index cdb60cf3f61..13e37dbc512 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -253,7 +243,7 @@
IL_008c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_0091: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0096: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$assembly::next@9
- IL_009b: br.s IL_00e3
+ IL_009b: br.s IL_00d7
IL_009d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_00a2: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -262,37 +252,37 @@
IL_00ad: ldloc.0
IL_00ae: call int32[] assembly::get_r()
IL_00b3: ldloc.0
- IL_00b4: ldelem [runtime]System.Int32
- IL_00b9: call int32[] assembly::get_w()
- IL_00be: ldloc.0
- IL_00bf: ldelem [runtime]System.Int32
- IL_00c4: add
- IL_00c5: stelem [runtime]System.Int32
- IL_00ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00cf: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00d4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
- IL_00d9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00de: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00e3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00e8: brtrue.s IL_009d
-
- IL_00ea: nop
+ IL_00b4: ldelem.i4
+ IL_00b5: call int32[] assembly::get_w()
+ IL_00ba: ldloc.0
+ IL_00bb: ldelem.i4
+ IL_00bc: add
+ IL_00bd: stelem.i4
+ IL_00be: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00c3: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00c8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
+ IL_00cd: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00d2: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00d7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00dc: brtrue.s IL_009d
+
+ IL_00de: nop
+ IL_00df: nop
+ IL_00e0: call int32[] assembly::get_r()
+ IL_00e5: ldc.i4.0
+ IL_00e6: ldelem.i4
+ IL_00e7: ldc.i4.3
+ IL_00e8: bne.un.s IL_00ee
+
+ IL_00ea: ldc.i4.0
IL_00eb: nop
- IL_00ec: call int32[] assembly::get_r()
- IL_00f1: ldc.i4.0
- IL_00f2: ldelem [runtime]System.Int32
- IL_00f7: ldc.i4.3
- IL_00f8: bne.un.s IL_00fe
-
- IL_00fa: ldc.i4.0
- IL_00fb: nop
- IL_00fc: br.s IL_0100
-
- IL_00fe: ldc.i4.1
- IL_00ff: nop
- IL_0100: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0105: pop
- IL_0106: ret
+ IL_00ec: br.s IL_00f0
+
+ IL_00ee: ldc.i4.1
+ IL_00ef: nop
+ IL_00f0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00f5: pop
+ IL_00f6: ret
}
}
@@ -301,4 +291,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
index dc19fd30e6e..90df5879111 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
@@ -158,7 +158,7 @@
IL_0076: ldloc.0
IL_0077: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_007c: stloc.s V_8
- IL_007e: br.s IL_00b8
+ IL_007e: br.s IL_00ac
IL_0080: ldloc.0
IL_0081: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -167,39 +167,39 @@
IL_008d: ldloc.s V_9
IL_008f: call int32[] assembly::get_r()
IL_0094: ldloc.s V_9
- IL_0096: ldelem [runtime]System.Int32
- IL_009b: call int32[] assembly::get_w()
- IL_00a0: ldloc.s V_9
- IL_00a2: ldelem [runtime]System.Int32
- IL_00a7: add
- IL_00a8: stelem [runtime]System.Int32
- IL_00ad: ldloc.s V_8
- IL_00af: stloc.0
- IL_00b0: ldloc.0
- IL_00b1: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00b6: stloc.s V_8
- IL_00b8: ldloc.s V_8
- IL_00ba: brtrue.s IL_0080
-
- IL_00bc: nop
+ IL_0096: ldelem.i4
+ IL_0097: call int32[] assembly::get_w()
+ IL_009c: ldloc.s V_9
+ IL_009e: ldelem.i4
+ IL_009f: add
+ IL_00a0: stelem.i4
+ IL_00a1: ldloc.s V_8
+ IL_00a3: stloc.0
+ IL_00a4: ldloc.0
+ IL_00a5: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00aa: stloc.s V_8
+ IL_00ac: ldloc.s V_8
+ IL_00ae: brtrue.s IL_0080
+
+ IL_00b0: nop
+ IL_00b1: nop
+ IL_00b2: call int32[] assembly::get_r()
+ IL_00b7: ldc.i4.0
+ IL_00b8: ldelem.i4
+ IL_00b9: ldc.i4.3
+ IL_00ba: bne.un.s IL_00c0
+
+ IL_00bc: ldc.i4.0
IL_00bd: nop
- IL_00be: call int32[] assembly::get_r()
- IL_00c3: ldc.i4.0
- IL_00c4: ldelem [runtime]System.Int32
- IL_00c9: ldc.i4.3
- IL_00ca: bne.un.s IL_00d0
-
- IL_00cc: ldc.i4.0
- IL_00cd: nop
- IL_00ce: br.s IL_00d2
-
- IL_00d0: ldc.i4.1
- IL_00d1: nop
- IL_00d2: stloc.s V_10
- IL_00d4: ldloc.s V_10
- IL_00d6: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00db: pop
- IL_00dc: ret
+ IL_00be: br.s IL_00c2
+
+ IL_00c0: ldc.i4.1
+ IL_00c1: nop
+ IL_00c2: stloc.s V_10
+ IL_00c4: ldloc.s V_10
+ IL_00c6: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00cb: pop
+ IL_00cc: ret
}
.property int32[] r()
@@ -236,4 +236,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index 33caf0bc8ca..b587873a3f1 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd04.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -220,7 +210,7 @@
IL_008c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_0091: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
IL_0096: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::next@9
- IL_009b: br.s IL_00e3
+ IL_009b: br.s IL_00d7
IL_009d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
IL_00a2: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault()
@@ -229,37 +219,37 @@
IL_00ad: ldloc.0
IL_00ae: call int32[] assembly::get_r()
IL_00b3: ldloc.0
- IL_00b4: ldelem [runtime]System.Int32
- IL_00b9: call int32[] assembly::get_w()
- IL_00be: ldloc.0
- IL_00bf: ldelem [runtime]System.Int32
- IL_00c4: add
- IL_00c5: stelem [runtime]System.Int32
- IL_00ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00cf: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00d4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
- IL_00d9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
- IL_00de: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_00e3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
- IL_00e8: brtrue.s IL_009d
-
- IL_00ea: nop
+ IL_00b4: ldelem.i4
+ IL_00b5: call int32[] assembly::get_w()
+ IL_00ba: ldloc.0
+ IL_00bb: ldelem.i4
+ IL_00bc: add
+ IL_00bd: stelem.i4
+ IL_00be: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00c3: call void assembly::set_current@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00c8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_current@9()
+ IL_00cd: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull()
+ IL_00d2: call void assembly::set_next@9(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_00d7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_next@9()
+ IL_00dc: brtrue.s IL_009d
+
+ IL_00de: nop
+ IL_00df: nop
+ IL_00e0: call int32[] assembly::get_r()
+ IL_00e5: ldc.i4.0
+ IL_00e6: ldelem.i4
+ IL_00e7: ldc.i4.3
+ IL_00e8: bne.un.s IL_00ee
+
+ IL_00ea: ldc.i4.0
IL_00eb: nop
- IL_00ec: call int32[] assembly::get_r()
- IL_00f1: ldc.i4.0
- IL_00f2: ldelem [runtime]System.Int32
- IL_00f7: ldc.i4.3
- IL_00f8: bne.un.s IL_00fe
-
- IL_00fa: ldc.i4.0
- IL_00fb: nop
- IL_00fc: br.s IL_0100
-
- IL_00fe: ldc.i4.1
- IL_00ff: nop
- IL_0100: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_0105: pop
- IL_0106: ret
+ IL_00ec: br.s IL_00f0
+
+ IL_00ee: ldc.i4.1
+ IL_00ef: nop
+ IL_00f0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00f5: pop
+ IL_00f6: ret
}
.property int32[] r()
@@ -320,4 +310,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
index a693bbf47b8..b25fee3d51f 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOff.il.bsl
@@ -127,7 +127,7 @@
IL_0040: stloc.2
IL_0041: ldloc.2
IL_0042: ldloc.3
- IL_0043: blt.s IL_00af
+ IL_0043: blt.s IL_00a3
IL_0045: ldc.i4.0
IL_0046: stloc.s V_7
@@ -154,57 +154,57 @@
IL_006a: stloc.s V_6
IL_006c: ldloc.s V_6
IL_006e: ldloc.s V_7
- IL_0070: blt.s IL_00a5
+ IL_0070: blt.s IL_0099
IL_0072: call int32[] assembly::get_r()
IL_0077: ldloc.s V_7
IL_0079: call int32[] assembly::get_r()
IL_007e: ldloc.s V_7
- IL_0080: ldelem [runtime]System.Int32
- IL_0085: call int32[] assembly::get_w()
- IL_008a: ldloc.s V_7
- IL_008c: ldelem [runtime]System.Int32
- IL_0091: add
- IL_0092: stelem [runtime]System.Int32
- IL_0097: ldloc.s V_7
- IL_0099: ldc.i4.1
- IL_009a: add
- IL_009b: stloc.s V_7
- IL_009d: ldloc.s V_7
- IL_009f: ldloc.s V_6
- IL_00a1: ldc.i4.1
- IL_00a2: add
- IL_00a3: bne.un.s IL_0072
-
- IL_00a5: ldloc.3
- IL_00a6: ldc.i4.1
- IL_00a7: add
- IL_00a8: stloc.3
- IL_00a9: ldloc.3
- IL_00aa: ldloc.2
- IL_00ab: ldc.i4.1
- IL_00ac: add
- IL_00ad: bne.un.s IL_0045
-
- IL_00af: nop
- IL_00b0: nop
- IL_00b1: call int32[] assembly::get_r()
- IL_00b6: ldc.i4.0
- IL_00b7: ldelem [runtime]System.Int32
- IL_00bc: ldc.i4.s 11
- IL_00be: bne.un.s IL_00c4
-
- IL_00c0: ldc.i4.0
- IL_00c1: nop
- IL_00c2: br.s IL_00c6
-
- IL_00c4: ldc.i4.1
- IL_00c5: nop
- IL_00c6: stloc.s V_10
- IL_00c8: ldloc.s V_10
- IL_00ca: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00cf: pop
- IL_00d0: ret
+ IL_0080: ldelem.i4
+ IL_0081: call int32[] assembly::get_w()
+ IL_0086: ldloc.s V_7
+ IL_0088: ldelem.i4
+ IL_0089: add
+ IL_008a: stelem.i4
+ IL_008b: ldloc.s V_7
+ IL_008d: ldc.i4.1
+ IL_008e: add
+ IL_008f: stloc.s V_7
+ IL_0091: ldloc.s V_7
+ IL_0093: ldloc.s V_6
+ IL_0095: ldc.i4.1
+ IL_0096: add
+ IL_0097: bne.un.s IL_0072
+
+ IL_0099: ldloc.3
+ IL_009a: ldc.i4.1
+ IL_009b: add
+ IL_009c: stloc.3
+ IL_009d: ldloc.3
+ IL_009e: ldloc.2
+ IL_009f: ldc.i4.1
+ IL_00a0: add
+ IL_00a1: bne.un.s IL_0045
+
+ IL_00a3: nop
+ IL_00a4: nop
+ IL_00a5: call int32[] assembly::get_r()
+ IL_00aa: ldc.i4.0
+ IL_00ab: ldelem.i4
+ IL_00ac: ldc.i4.s 11
+ IL_00ae: bne.un.s IL_00b4
+
+ IL_00b0: ldc.i4.0
+ IL_00b1: nop
+ IL_00b2: br.s IL_00b6
+
+ IL_00b4: ldc.i4.1
+ IL_00b5: nop
+ IL_00b6: stloc.s V_10
+ IL_00b8: ldloc.s V_10
+ IL_00ba: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00bf: pop
+ IL_00c0: ret
}
}
@@ -213,4 +213,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 5aca7747bda..d73eb8dd2bc 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -128,7 +118,7 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_009a
+ IL_0039: blt.s IL_008e
IL_003b: ldc.i4.0
IL_003c: stloc.3
@@ -155,55 +145,55 @@
IL_005f: stloc.2
IL_0060: ldloc.2
IL_0061: ldloc.3
- IL_0062: blt.s IL_0090
+ IL_0062: blt.s IL_0084
IL_0064: call int32[] assembly::get_r()
IL_0069: ldloc.3
IL_006a: call int32[] assembly::get_r()
IL_006f: ldloc.3
- IL_0070: ldelem [runtime]System.Int32
- IL_0075: call int32[] assembly::get_w()
+ IL_0070: ldelem.i4
+ IL_0071: call int32[] assembly::get_w()
+ IL_0076: ldloc.3
+ IL_0077: ldelem.i4
+ IL_0078: add
+ IL_0079: stelem.i4
IL_007a: ldloc.3
- IL_007b: ldelem [runtime]System.Int32
- IL_0080: add
- IL_0081: stelem [runtime]System.Int32
- IL_0086: ldloc.3
- IL_0087: ldc.i4.1
- IL_0088: add
- IL_0089: stloc.3
- IL_008a: ldloc.3
- IL_008b: ldloc.2
- IL_008c: ldc.i4.1
- IL_008d: add
- IL_008e: bne.un.s IL_0064
-
- IL_0090: ldloc.1
- IL_0091: ldc.i4.1
- IL_0092: add
- IL_0093: stloc.1
- IL_0094: ldloc.1
- IL_0095: ldloc.0
- IL_0096: ldc.i4.1
- IL_0097: add
- IL_0098: bne.un.s IL_003b
-
- IL_009a: nop
- IL_009b: nop
- IL_009c: call int32[] assembly::get_r()
- IL_00a1: ldc.i4.0
- IL_00a2: ldelem [runtime]System.Int32
- IL_00a7: ldc.i4.s 11
- IL_00a9: bne.un.s IL_00af
-
- IL_00ab: ldc.i4.0
- IL_00ac: nop
- IL_00ad: br.s IL_00b1
-
- IL_00af: ldc.i4.1
- IL_00b0: nop
- IL_00b1: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00b6: pop
- IL_00b7: ret
+ IL_007b: ldc.i4.1
+ IL_007c: add
+ IL_007d: stloc.3
+ IL_007e: ldloc.3
+ IL_007f: ldloc.2
+ IL_0080: ldc.i4.1
+ IL_0081: add
+ IL_0082: bne.un.s IL_0064
+
+ IL_0084: ldloc.1
+ IL_0085: ldc.i4.1
+ IL_0086: add
+ IL_0087: stloc.1
+ IL_0088: ldloc.1
+ IL_0089: ldloc.0
+ IL_008a: ldc.i4.1
+ IL_008b: add
+ IL_008c: bne.un.s IL_003b
+
+ IL_008e: nop
+ IL_008f: nop
+ IL_0090: call int32[] assembly::get_r()
+ IL_0095: ldc.i4.0
+ IL_0096: ldelem.i4
+ IL_0097: ldc.i4.s 11
+ IL_0099: bne.un.s IL_009f
+
+ IL_009b: ldc.i4.0
+ IL_009c: nop
+ IL_009d: br.s IL_00a1
+
+ IL_009f: ldc.i4.1
+ IL_00a0: nop
+ IL_00a1: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00a6: pop
+ IL_00a7: ret
}
}
@@ -212,4 +202,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
index a8c564901d3..9600546542d 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOff.il.bsl
@@ -112,7 +112,7 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_00a5
+ IL_0039: blt.s IL_0099
IL_003b: ldc.i4.0
IL_003c: stloc.s V_5
@@ -139,57 +139,57 @@
IL_0060: stloc.s V_4
IL_0062: ldloc.s V_4
IL_0064: ldloc.s V_5
- IL_0066: blt.s IL_009b
+ IL_0066: blt.s IL_008f
IL_0068: call int32[] assembly::get_r()
IL_006d: ldloc.s V_5
IL_006f: call int32[] assembly::get_r()
IL_0074: ldloc.s V_5
- IL_0076: ldelem [runtime]System.Int32
- IL_007b: call int32[] assembly::get_w()
- IL_0080: ldloc.s V_5
- IL_0082: ldelem [runtime]System.Int32
- IL_0087: add
- IL_0088: stelem [runtime]System.Int32
- IL_008d: ldloc.s V_5
- IL_008f: ldc.i4.1
- IL_0090: add
- IL_0091: stloc.s V_5
- IL_0093: ldloc.s V_5
- IL_0095: ldloc.s V_4
- IL_0097: ldc.i4.1
- IL_0098: add
- IL_0099: bne.un.s IL_0068
-
- IL_009b: ldloc.1
- IL_009c: ldc.i4.1
- IL_009d: add
- IL_009e: stloc.1
- IL_009f: ldloc.1
- IL_00a0: ldloc.0
- IL_00a1: ldc.i4.1
- IL_00a2: add
- IL_00a3: bne.un.s IL_003b
-
- IL_00a5: nop
- IL_00a6: nop
- IL_00a7: call int32[] assembly::get_r()
- IL_00ac: ldc.i4.0
- IL_00ad: ldelem [runtime]System.Int32
- IL_00b2: ldc.i4.s 11
- IL_00b4: bne.un.s IL_00ba
-
- IL_00b6: ldc.i4.0
- IL_00b7: nop
- IL_00b8: br.s IL_00bc
-
- IL_00ba: ldc.i4.1
- IL_00bb: nop
- IL_00bc: stloc.s V_8
- IL_00be: ldloc.s V_8
- IL_00c0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00c5: pop
- IL_00c6: ret
+ IL_0076: ldelem.i4
+ IL_0077: call int32[] assembly::get_w()
+ IL_007c: ldloc.s V_5
+ IL_007e: ldelem.i4
+ IL_007f: add
+ IL_0080: stelem.i4
+ IL_0081: ldloc.s V_5
+ IL_0083: ldc.i4.1
+ IL_0084: add
+ IL_0085: stloc.s V_5
+ IL_0087: ldloc.s V_5
+ IL_0089: ldloc.s V_4
+ IL_008b: ldc.i4.1
+ IL_008c: add
+ IL_008d: bne.un.s IL_0068
+
+ IL_008f: ldloc.1
+ IL_0090: ldc.i4.1
+ IL_0091: add
+ IL_0092: stloc.1
+ IL_0093: ldloc.1
+ IL_0094: ldloc.0
+ IL_0095: ldc.i4.1
+ IL_0096: add
+ IL_0097: bne.un.s IL_003b
+
+ IL_0099: nop
+ IL_009a: nop
+ IL_009b: call int32[] assembly::get_r()
+ IL_00a0: ldc.i4.0
+ IL_00a1: ldelem.i4
+ IL_00a2: ldc.i4.s 11
+ IL_00a4: bne.un.s IL_00aa
+
+ IL_00a6: ldc.i4.0
+ IL_00a7: nop
+ IL_00a8: br.s IL_00ac
+
+ IL_00aa: ldc.i4.1
+ IL_00ab: nop
+ IL_00ac: stloc.s V_8
+ IL_00ae: ldloc.s V_8
+ IL_00b0: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00b5: pop
+ IL_00b6: ret
}
.property int32[] r()
@@ -226,4 +226,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index edd7456baca..26638c87294 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/NonTrivialBranchingBindingInEnd05.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -119,7 +109,7 @@
IL_0036: stloc.0
IL_0037: ldloc.0
IL_0038: ldloc.1
- IL_0039: blt.s IL_009a
+ IL_0039: blt.s IL_008e
IL_003b: ldc.i4.0
IL_003c: stloc.3
@@ -146,55 +136,55 @@
IL_005f: stloc.2
IL_0060: ldloc.2
IL_0061: ldloc.3
- IL_0062: blt.s IL_0090
+ IL_0062: blt.s IL_0084
IL_0064: call int32[] assembly::get_r()
IL_0069: ldloc.3
IL_006a: call int32[] assembly::get_r()
IL_006f: ldloc.3
- IL_0070: ldelem [runtime]System.Int32
- IL_0075: call int32[] assembly::get_w()
+ IL_0070: ldelem.i4
+ IL_0071: call int32[] assembly::get_w()
+ IL_0076: ldloc.3
+ IL_0077: ldelem.i4
+ IL_0078: add
+ IL_0079: stelem.i4
IL_007a: ldloc.3
- IL_007b: ldelem [runtime]System.Int32
- IL_0080: add
- IL_0081: stelem [runtime]System.Int32
- IL_0086: ldloc.3
- IL_0087: ldc.i4.1
- IL_0088: add
- IL_0089: stloc.3
- IL_008a: ldloc.3
- IL_008b: ldloc.2
- IL_008c: ldc.i4.1
- IL_008d: add
- IL_008e: bne.un.s IL_0064
-
- IL_0090: ldloc.1
- IL_0091: ldc.i4.1
- IL_0092: add
- IL_0093: stloc.1
- IL_0094: ldloc.1
- IL_0095: ldloc.0
- IL_0096: ldc.i4.1
- IL_0097: add
- IL_0098: bne.un.s IL_003b
-
- IL_009a: nop
- IL_009b: nop
- IL_009c: call int32[] assembly::get_r()
- IL_00a1: ldc.i4.0
- IL_00a2: ldelem [runtime]System.Int32
- IL_00a7: ldc.i4.s 11
- IL_00a9: bne.un.s IL_00af
-
- IL_00ab: ldc.i4.0
- IL_00ac: nop
- IL_00ad: br.s IL_00b1
-
- IL_00af: ldc.i4.1
- IL_00b0: nop
- IL_00b1: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
- IL_00b6: pop
- IL_00b7: ret
+ IL_007b: ldc.i4.1
+ IL_007c: add
+ IL_007d: stloc.3
+ IL_007e: ldloc.3
+ IL_007f: ldloc.2
+ IL_0080: ldc.i4.1
+ IL_0081: add
+ IL_0082: bne.un.s IL_0064
+
+ IL_0084: ldloc.1
+ IL_0085: ldc.i4.1
+ IL_0086: add
+ IL_0087: stloc.1
+ IL_0088: ldloc.1
+ IL_0089: ldloc.0
+ IL_008a: ldc.i4.1
+ IL_008b: add
+ IL_008c: bne.un.s IL_003b
+
+ IL_008e: nop
+ IL_008f: nop
+ IL_0090: call int32[] assembly::get_r()
+ IL_0095: ldc.i4.0
+ IL_0096: ldelem.i4
+ IL_0097: ldc.i4.s 11
+ IL_0099: bne.un.s IL_009f
+
+ IL_009b: ldc.i4.0
+ IL_009c: nop
+ IL_009d: br.s IL_00a1
+
+ IL_009f: ldc.i4.1
+ IL_00a0: nop
+ IL_00a1: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+ IL_00a6: pop
+ IL_00a7: ret
}
.property int32[] r()
@@ -231,4 +221,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 1a3b630b6b2..eaf8a630df7 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -50,23 +40,23 @@
.locals init (int32 V_0)
IL_0000: ldc.i4.0
IL_0001: stloc.0
- IL_0002: br.s IL_0010
+ IL_0002: br.s IL_000c
IL_0004: ldarg.0
IL_0005: ldloc.0
IL_0006: ldloc.0
- IL_0007: stelem [runtime]System.Int32
+ IL_0007: stelem.i4
+ IL_0008: ldloc.0
+ IL_0009: ldc.i4.1
+ IL_000a: add
+ IL_000b: stloc.0
IL_000c: ldloc.0
- IL_000d: ldc.i4.1
- IL_000e: add
- IL_000f: stloc.0
- IL_0010: ldloc.0
- IL_0011: ldarg.0
- IL_0012: ldlen
- IL_0013: conv.i4
- IL_0014: blt.s IL_0004
-
- IL_0016: ret
+ IL_000d: ldarg.0
+ IL_000e: ldlen
+ IL_000f: conv.i4
+ IL_0010: blt.s IL_0004
+
+ IL_0012: ret
}
}
@@ -88,4 +78,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index 1a3b630b6b2..eaf8a630df7 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength01.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -50,23 +40,23 @@
.locals init (int32 V_0)
IL_0000: ldc.i4.0
IL_0001: stloc.0
- IL_0002: br.s IL_0010
+ IL_0002: br.s IL_000c
IL_0004: ldarg.0
IL_0005: ldloc.0
IL_0006: ldloc.0
- IL_0007: stelem [runtime]System.Int32
+ IL_0007: stelem.i4
+ IL_0008: ldloc.0
+ IL_0009: ldc.i4.1
+ IL_000a: add
+ IL_000b: stloc.0
IL_000c: ldloc.0
- IL_000d: ldc.i4.1
- IL_000e: add
- IL_000f: stloc.0
- IL_0010: ldloc.0
- IL_0011: ldarg.0
- IL_0012: ldlen
- IL_0013: conv.i4
- IL_0014: blt.s IL_0004
-
- IL_0016: ret
+ IL_000d: ldarg.0
+ IL_000e: ldlen
+ IL_000f: conv.i4
+ IL_0010: blt.s IL_0004
+
+ IL_0012: ret
}
}
@@ -88,4 +78,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
index 2d7c1c580ba..4ab34b0cd6c 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOff.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -58,23 +48,23 @@
IL_000a: stloc.0
IL_000b: ldloc.0
IL_000c: ldloc.1
- IL_000d: blt.s IL_0021
+ IL_000d: blt.s IL_001d
IL_000f: ldarg.0
IL_0010: ldloc.1
IL_0011: ldloc.1
- IL_0012: stelem [runtime]System.Int32
+ IL_0012: stelem.i4
+ IL_0013: ldloc.1
+ IL_0014: ldc.i4.1
+ IL_0015: add
+ IL_0016: stloc.1
IL_0017: ldloc.1
- IL_0018: ldc.i4.1
- IL_0019: add
- IL_001a: stloc.1
- IL_001b: ldloc.1
- IL_001c: ldloc.0
- IL_001d: ldc.i4.1
- IL_001e: add
- IL_001f: bne.un.s IL_000f
-
- IL_0021: ret
+ IL_0018: ldloc.0
+ IL_0019: ldc.i4.1
+ IL_001a: add
+ IL_001b: bne.un.s IL_000f
+
+ IL_001d: ret
}
}
@@ -96,4 +86,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
index 2d7c1c580ba..4ab34b0cd6c 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/ForLoop/ZeroToArrLength02.fs.RealInternalSignatureOn.OptimizeOn.il.bsl
@@ -16,16 +16,6 @@
.hash algorithm 0x00008004
.ver 0:0:0:0
-}
-.mresource public FSharpSignatureCompressedData.assembly
-{
-
-
-}
-.mresource public FSharpOptimizationCompressedData.assembly
-{
-
-
}
.module assembly.exe
@@ -58,23 +48,23 @@
IL_000a: stloc.0
IL_000b: ldloc.0
IL_000c: ldloc.1
- IL_000d: blt.s IL_0021
+ IL_000d: blt.s IL_001d
IL_000f: ldarg.0
IL_0010: ldloc.1
IL_0011: ldloc.1
- IL_0012: stelem [runtime]System.Int32
+ IL_0012: stelem.i4
+ IL_0013: ldloc.1
+ IL_0014: ldc.i4.1
+ IL_0015: add
+ IL_0016: stloc.1
IL_0017: ldloc.1
- IL_0018: ldc.i4.1
- IL_0019: add
- IL_001a: stloc.1
- IL_001b: ldloc.1
- IL_001c: ldloc.0
- IL_001d: ldc.i4.1
- IL_001e: add
- IL_001f: bne.un.s IL_000f
-
- IL_0021: ret
+ IL_0018: ldloc.0
+ IL_0019: ldc.i4.1
+ IL_001a: add
+ IL_001b: bne.un.s IL_000f
+
+ IL_001d: ret
}
}
@@ -96,4 +86,3 @@
-
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc/CodeGenRenamings01.fs.RealInternalSignatureOff.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc/CodeGenRenamings01.fs.RealInternalSignatureOff.il.bsl
index 3502e1e886d..b6a57f176c1 100644
--- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc/CodeGenRenamings01.fs.RealInternalSignatureOff.il.bsl
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc/CodeGenRenamings01.fs.RealInternalSignatureOff.il.bsl
@@ -45,9 +45,7 @@
.custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
- .method public specialname rtspecialname
- instance void .ctor(int32 pc,
- class [runtime]System.Tuple`2 current) cil managed
+ .method public specialname rtspecialname instance void .ctor(int32 pc, class [runtime]System.Tuple`2 current) cil managed
{
.maxstack 8
@@ -93,7 +91,7 @@
IL_002d: ldc.i4.1
IL_002e: ldc.i4.1
IL_002f: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
+ !1)
IL_0034: stfld class [runtime]System.Tuple`2 assembly/seq1@9::current
IL_0039: ldc.i4.1
IL_003a: ret
@@ -105,7 +103,7 @@
IL_0043: ldc.i4.2
IL_0044: ldc.i4.2
IL_0045: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
+ !1)
IL_004a: stfld class [runtime]System.Tuple`2 assembly/seq1@9::current
IL_004f: ldc.i4.1
IL_0050: ret
@@ -435,243 +433,243 @@
IL_003b: dup
IL_003c: ldc.i4.0
IL_003d: ldc.i4.1
- IL_003e: stelem [runtime]System.Int32
+ IL_003e: stelem.i4
+ IL_003f: dup
+ IL_0040: ldc.i4.1
+ IL_0041: ldc.i4.2
+ IL_0042: stelem.i4
IL_0043: dup
- IL_0044: ldc.i4.1
- IL_0045: ldc.i4.2
- IL_0046: stelem [runtime]System.Int32
- IL_004b: dup
- IL_004c: ldc.i4.2
- IL_004d: ldc.i4.3
- IL_004e: stelem [runtime]System.Int32
- IL_0053: dup
- IL_0054: stsfld int32[] ''.$assembly::array@6
- IL_0059: stloc.1
- IL_005a: ldc.i4.1
- IL_005b: ldc.i4.1
- IL_005c: ldc.i4.s 10
- IL_005e: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32,
- int32,
- int32)
- IL_0063: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [runtime]System.Collections.Generic.IEnumerable`1)
- IL_0068: dup
- IL_0069: stsfld class [runtime]System.Collections.Generic.IEnumerable`1 ''.$assembly::aseq@7
- IL_006e: stloc.2
- IL_006f: ldc.i4.1
- IL_0070: ldc.i4.1
- IL_0071: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
- IL_0076: ldc.i4.2
- IL_0077: ldc.i4.2
- IL_0078: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
- IL_007d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::get_Empty()
- IL_0082: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::Cons(!0,
- class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_0087: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::Cons(!0,
- class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_008c: dup
- IL_008d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> ''.$assembly::list1@8
- IL_0092: stloc.3
- IL_0093: ldc.i4.0
- IL_0094: ldnull
- IL_0095: newobj instance void assembly/seq1@9::.ctor(int32,
+ IL_0044: ldc.i4.2
+ IL_0045: ldc.i4.3
+ IL_0046: stelem.i4
+ IL_0047: dup
+ IL_0048: stsfld int32[] ''.$assembly::array@6
+ IL_004d: stloc.1
+ IL_004e: ldc.i4.1
+ IL_004f: ldc.i4.1
+ IL_0050: ldc.i4.s 10
+ IL_0052: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32,
+ int32,
+ int32)
+ IL_0057: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::CreateSequence(class [runtime]System.Collections.Generic.IEnumerable`1)
+ IL_005c: dup
+ IL_005d: stsfld class [runtime]System.Collections.Generic.IEnumerable`1 ''.$assembly::aseq@7
+ IL_0062: stloc.2
+ IL_0063: ldc.i4.1
+ IL_0064: ldc.i4.1
+ IL_0065: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
+ !1)
+ IL_006a: ldc.i4.2
+ IL_006b: ldc.i4.2
+ IL_006c: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
+ !1)
+ IL_0071: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::get_Empty()
+ IL_0076: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::Cons(!0,
+ class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_007b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>::Cons(!0,
+ class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
+ IL_0080: dup
+ IL_0081: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> ''.$assembly::list1@8
+ IL_0086: stloc.3
+ IL_0087: ldc.i4.0
+ IL_0088: ldnull
+ IL_0089: newobj instance void assembly/seq1@9::.ctor(int32,
class [runtime]System.Tuple`2)
- IL_009a: dup
- IL_009b: stsfld class [runtime]System.Collections.Generic.IEnumerable`1> ''.$assembly::seq1@9
- IL_00a0: stloc.s V_4
- IL_00a2: ldc.i4.2
- IL_00a3: newarr class [runtime]System.Tuple`2
- IL_00a8: dup
- IL_00a9: ldc.i4.0
- IL_00aa: ldc.i4.1
+ IL_008e: dup
+ IL_008f: stsfld class [runtime]System.Collections.Generic.IEnumerable`1> ''.$assembly::seq1@9
+ IL_0094: stloc.s V_4
+ IL_0096: ldc.i4.2
+ IL_0097: newarr class [runtime]System.Tuple`2
+ IL_009c: dup
+ IL_009d: ldc.i4.0
+ IL_009e: ldc.i4.1
+ IL_009f: ldc.i4.1
+ IL_00a0: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
+ !1)
+ IL_00a5: stelem class [runtime]System.Tuple`2
+ IL_00aa: dup
IL_00ab: ldc.i4.1
- IL_00ac: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
- IL_00b1: stelem class [runtime]System.Tuple`2
- IL_00b6: dup
- IL_00b7: ldc.i4.1
- IL_00b8: ldc.i4.2
- IL_00b9: ldc.i4.2
- IL_00ba: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
- !1)
- IL_00bf: stelem class [runtime]System.Tuple`2
- IL_00c4: dup
- IL_00c5: stsfld class [runtime]System.Tuple`2[] ''.$assembly::array1@10
- IL_00ca: stloc.s V_5
- IL_00cc: ldc.i4.2
- IL_00cd: ldc.i4.2
- IL_00ce: ldc.i4.0
- IL_00cf: call !!0[0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array2DModule::Create(int32,
+ IL_00ac: ldc.i4.2
+ IL_00ad: ldc.i4.2
+ IL_00ae: newobj instance void class [runtime]System.Tuple`2::.ctor(!0,
+ !1)
+ IL_00b3: stelem class [runtime]System.Tuple`2
+ IL_00b8: dup
+ IL_00b9: stsfld class [runtime]System.Tuple`2[] ''.$assembly::array1@10
+ IL_00be: stloc.s V_5
+ IL_00c0: ldc.i4.2
+ IL_00c1: ldc.i4.2
+ IL_00c2: ldc.i4.0
+ IL_00c3: call !!0[0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array2DModule::Create(int32,
int32,
!!0)
- IL_00d4: dup
- IL_00d5: stsfld int32[0...,0...] ''.$assembly::a3@11
- IL_00da: stloc.s V_6
- IL_00dc: ldc.i4.3
- IL_00dd: ldc.i4.3
- IL_00de: ldc.i4.3
- IL_00df: ldc.i4.0
- IL_00e0: call !!0[0...,0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array3DModule::Create(int32,
+ IL_00c8: dup
+ IL_00c9: stsfld int32[0...,0...] ''.$assembly::a3@11
+ IL_00ce: stloc.s V_6
+ IL_00d0: ldc.i4.3
+ IL_00d1: ldc.i4.3
+ IL_00d2: ldc.i4.3
+ IL_00d3: ldc.i4.0
+ IL_00d4: call !!0[0...,0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array3DModule::Create(int32,
int32,
int32,
!!0)
- IL_00e5: dup
- IL_00e6: stsfld int32[0...,0...,0...] ''.$assembly::array3D@12
- IL_00eb: stloc.s V_7
- IL_00ed: ldc.i4.4
- IL_00ee: ldc.i4.4
- IL_00ef: ldc.i4.4
- IL_00f0: ldc.i4.4
- IL_00f1: ldc.i4.0
- IL_00f2: call !!0[0...,0...,0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array4DModule::Create(int32,
+ IL_00d9: dup
+ IL_00da: stsfld int32[0...,0...,0...] ''.$assembly::array3D@12
+ IL_00df: stloc.s V_7
+ IL_00e1: ldc.i4.4
+ IL_00e2: ldc.i4.4
+ IL_00e3: ldc.i4.4
+ IL_00e4: ldc.i4.4
+ IL_00e5: ldc.i4.0
+ IL_00e6: call !!0[0...,0...,0...,0...] [FSharp.Core]Microsoft.FSharp.Collections.Array4DModule::Create(int32,
int32,
int32,
int32,
!!0)
- IL_00f7: dup
- IL_00f8: stsfld int32[0...,0...,0...,0...] ''.$assembly::array4D@13
- IL_00fd: stloc.s V_8
- IL_00ff: call int32[] assembly::get_array()
- IL_0104: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::OfArray(!!0[])
- IL_0109: pop
- IL_010a: call class [runtime]System.Collections.Generic.IEnumerable`1 assembly::get_aseq()
- IL_010f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.ListModule::OfSeq(class [runtime]System.Collections.Generic.IEnumerable`1)
- IL_0114: pop
- IL_0115: call class [runtime]System.Tuple`2[] assembly::get_array1()
- IL_011a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpMap`2 [FSharp.Core]Microsoft.FSharp.Collections.MapModule::OfArray(class [runtime]System.Tuple`2[])
- IL_011f: pop
- IL_0120: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> assembly::get_list1()
- IL_0125: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpMap`2 [FSharp.Core]Microsoft.FSharp.Collections.MapModule::OfList(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1>)
- IL_012a: pop
- IL_012b: call class [runtime]System.Collections.Generic.IEnumerable`1> assembly::get_seq1()
- IL_0130: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpMap`2 [FSharp.Core]Microsoft.FSharp.Collections.MapModule::OfSeq(class [runtime]System.Collections.Generic.IEnumerable`1>)
- IL_0135: pop
- IL_0136: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 assembly::get_alist()
- IL_013b: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::OfList(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1)
- IL_0140: dup
- IL_0141: stsfld int32[] ''.$assembly::a1@25
- IL_0146: stloc.s V_9
- IL_0148: call class [runtime]System.Collections.Generic.IEnumerable`1 assembly::get_aseq()
- IL_014d: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::OfSeq(class [runtime]System.Collections.Generic.IEnumerable`1)
- IL_0152: dup
- IL_0153: stsfld int32[] ''.$assembly::a2@26
- IL_0158: stloc.s V_10
- IL_015a: call int32[] assembly::get_a1()
- IL_015f: ldc.i4.0
- IL_0160: call !!0 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Get