提交 6db6a691 编写于 作者: V vsadov

rebased

上级 7569dbc8
......@@ -384,8 +384,7 @@ private void EmitLoweredConditionalAccessExpression(BoundLoweredConditionalAcces
// or if we have default(T) (to do box just once)
var nullCheckOnCopy = LocalRewriter.CanChangeValueBetweenReads(receiver, localsMayBeAssignedOrCaptured: false) ||
(receiverType.IsReferenceType && receiverType.TypeKind == TypeKind.TypeParameter) ||
(receiver.Kind == BoundKind.Local && IsStackLocal(((BoundLocal)receiver).LocalSymbol)) ||
(receiver.IsDefaultValue() && notConstrained);
(receiver.Kind == BoundKind.Local && IsStackLocal(((BoundLocal)receiver).LocalSymbol));
// ===== RECEIVER
if (nullCheckOnCopy)
......@@ -502,7 +501,7 @@ private void EmitLoweredConditionalAccessExpression(BoundLoweredConditionalAcces
Debug.Assert(receiverTemp == null);
// receiver may be used as target of a struct call (if T happens to be a sruct)
receiverTemp = EmitReceiverRef(receiver, AddressKind.Constrained);
Debug.Assert(receiverTemp == null);
Debug.Assert(receiverTemp == null || receiver.IsDefaultValue());
}
EmitExpression(expression.WhenNotNull, used);
......
......@@ -68,7 +68,7 @@ .maxstack 1
IL_0000: ldc.i4.s 42
IL_0002: stloc.0
IL_0003: ldloca.s V_0
IL_0005: call ""ref readonly int Program.M(ref readonly int)""
IL_0005: call ""ref readonly int Program.M(in int)""
IL_000a: ldind.i4
IL_000b: call ""void System.Console.WriteLine(int)""
IL_0010: ret
......@@ -103,7 +103,7 @@ .locals init (int V_0)
IL_0000: ldc.i4.s 42
IL_0002: stloc.0
IL_0003: ldloca.s V_0
IL_0005: call ""ref readonly int Program.M(ref readonly int)""
IL_0005: call ""ref readonly int Program.M(in int)""
IL_000a: ldind.i4
IL_000b: call ""void System.Console.WriteLine(int)""
IL_0010: ret
......@@ -137,14 +137,14 @@ public static void Main()
// Code size 17 (0x11)
.maxstack 1
IL_0000: ldsflda ""int Program.F""
IL_0005: call ""ref readonly int Program.M(ref readonly int)""
IL_0005: call ""ref readonly int Program.M(in int)""
IL_000a: ldind.i4
IL_000b: call ""void System.Console.WriteLine(int)""
IL_0010: ret
}");
comp.VerifyIL("Program.M(ref readonly int)", @"
comp.VerifyIL("Program.M(in int)", @"
{
// Code size 2 (0x2)
.maxstack 1
......@@ -180,12 +180,12 @@ public static void Main()
var comp = CompileAndVerify(text, parseOptions: TestOptions.Regular, verify: false, expectedOutput: "42");
comp.VerifyIL("Program.M(ref readonly int)", @"
comp.VerifyIL("Program.M(in int)", @"
{
// Code size 7 (0x7)
.maxstack 1
IL_0000: ldarg.0
IL_0001: call ""ref readonly int Program.M1(ref readonly int)""
IL_0001: call ""ref readonly int Program.M1(in int)""
IL_0006: ret
}");
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册