diff --git a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj
index 280b96abace2..9478a1b6fbca 100644
--- a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj
+++ b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj
@@ -60,6 +60,7 @@
+
diff --git a/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs b/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs
new file mode 100644
index 000000000000..520f9a6c330f
--- /dev/null
+++ b/src/fsharp/FSharp.Compiler.Unittests/RecordInitialisation.fs
@@ -0,0 +1,87 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+namespace FSharp.Compiler.Unittests
+
+open System
+open System.Text
+open NUnit.Framework
+open Microsoft.FSharp.Compiler
+
+type Foo =
+ { A : int
+ B : int
+ C : int }
+
+
+[]
+type OrderOfRecordInitialisation() =
+
+ let expected =
+ { A = 1
+ B = 2
+ C = 3 }
+
+ []
+ member this.ShouldInitialzeInGivenOrder1() =
+ let order = ref ""
+ let actual =
+ { A = let _ = order := !order + "1" in 1
+ B = let _ = order := !order + "2" in 2
+ C = let _ = order := !order + "3" in 3 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
+
+ []
+ member this.ShouldInitialzeInGivenOrder2() =
+ let order = ref ""
+ let actual =
+ { A = let _ = order := !order + "1" in 1
+ C = let _ = order := !order + "2" in 3
+ B = let _ = order := !order + "3" in 2 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
+
+ []
+ member this.ShouldInitialzeInGivenOrder3() =
+ let order = ref ""
+ let actual =
+ { B = let _ = order := !order + "1" in 2
+ A = let _ = order := !order + "2" in 1
+ C = let _ = order := !order + "3" in 3 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
+
+ []
+ member this.ShouldInitialzeInGivenOrder4() =
+ let order = ref ""
+ let actual =
+ { B = let _ = order := !order + "1" in 2
+ C = let _ = order := !order + "2" in 3
+ A = let _ = order := !order + "3" in 1 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
+
+ []
+ member this.ShouldInitialzeInGivenOrder5() =
+ let order = ref ""
+ let actual =
+ { C = let _ = order := !order + "1" in 3
+ A = let _ = order := !order + "2" in 1
+ B = let _ = order := !order + "3" in 2 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
+
+ []
+ member this.ShouldInitialzeInGivenOrder6() =
+ let order = ref ""
+ let actual =
+ { C = let _ = order := !order + "1" in 3
+ B = let _ = order := !order + "2" in 2
+ A = let _ = order := !order + "3" in 1 }
+
+ Assert.AreEqual(expected, actual)
+ Assert.AreEqual("123", !order)
\ No newline at end of file