diff --git a/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/Interpreter/LightCompiler.cs b/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/Interpreter/LightCompiler.cs index 5d905e07de2134bfff39e167221f7d918b0c377f..8c1f94e8ac3d62c866ce60b54d18b03c42995c06 100644 --- a/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/Interpreter/LightCompiler.cs +++ b/src/libraries/System.Linq.Expressions/src/System/Linq/Expressions/Interpreter/LightCompiler.cs @@ -2428,10 +2428,16 @@ private void CompileMember(Expression from, MemberInfo member, bool forBinding) { if (fi.IsLiteral) { + Debug.Assert(!forBinding); _instructions.EmitLoad(fi.GetValue(null), fi.FieldType); } else if (fi.IsStatic) { + if (forBinding) + { + throw Error.InvalidProgram(); + } + if (fi.IsInitOnly) { _instructions.EmitLoad(fi.GetValue(null), fi.FieldType); @@ -2447,6 +2453,7 @@ private void CompileMember(Expression from, MemberInfo member, bool forBinding) { EmitThisForMethodCall(from); } + _instructions.EmitLoadField(fi); } } diff --git a/src/libraries/System.Linq.Expressions/tests/MemberInit/ListBindTests.cs b/src/libraries/System.Linq.Expressions/tests/MemberInit/ListBindTests.cs index 8b659f8e7dbc43ebe4115ef64a2bb409432b98d1..6c2b16f740529abcb8ba44efe1bc8a76668cc758 100644 --- a/src/libraries/System.Linq.Expressions/tests/MemberInit/ListBindTests.cs +++ b/src/libraries/System.Linq.Expressions/tests/MemberInit/ListBindTests.cs @@ -191,7 +191,7 @@ public void StaticListProperty(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Theory, InlineData(false)] + [Theory, ClassData(typeof(CompilationTypes))] public void StaticListField(bool useInterpreter) { FieldInfo field = typeof(ListWrapper).GetField(nameof(ListWrapper.StaticListField)); @@ -211,13 +211,6 @@ public void StaticListField(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Fact, ActiveIssue(5963)] - public void StaticListFieldInterpreted() - { - // Misbalances stack. - StaticListField(true); - } - [Theory, ClassData(typeof(CompilationTypes))] public void InitializeVoidAdd(bool useInterperter) { diff --git a/src/libraries/System.Linq.Expressions/tests/MemberInit/MemberBindTests.cs b/src/libraries/System.Linq.Expressions/tests/MemberInit/MemberBindTests.cs index 86520bad783a6f63defbfeac06f1d0c6c5bac4e0..556de1c0919121a42eb27d0f53dbc27fb712f04e 100644 --- a/src/libraries/System.Linq.Expressions/tests/MemberInit/MemberBindTests.cs +++ b/src/libraries/System.Linq.Expressions/tests/MemberInit/MemberBindTests.cs @@ -142,7 +142,7 @@ public void StaticInnerProperty(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Theory, InlineData(false)] + [Theory, ClassData(typeof(CompilationTypes))] public void StaticInnerField(bool useInterpreter) { var exp = Expression.Lambda>( @@ -157,13 +157,6 @@ public void StaticInnerField(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Fact, ActiveIssue(5963)] - public void StaticInnerFieldInterpreted() - { - // Mis-balances stack - StaticInnerField(true); - } - [Theory, ClassData(typeof(CompilationTypes))] public void ReadonlyInnerProperty(bool useInterpreter) { @@ -211,7 +204,7 @@ public void StaticReadonlyInnerProperty(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Theory, InlineData(false)] + [Theory, ClassData(typeof(CompilationTypes))] public void StaticReadonlyInnerField(bool useInterpreter) { var exp = Expression.Lambda>( @@ -226,12 +219,6 @@ public void StaticReadonlyInnerField(bool useInterpreter) Assert.Throws(() => exp.Compile(useInterpreter)); } - [Fact, ActiveIssue(5963)] - public void StaticReadonlyInnerFieldInterpreted() - { - StaticReadonlyInnerField(true); - } - public void WriteOnlyInnerProperty() { var bind = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(0));