提交 ff8a9343 编写于 作者: V vsadov

Fix missing ValueKind check when binding array initializers

FIxes:#17395
上级 c2449391
......@@ -2286,9 +2286,11 @@ private TypeSymbol GetAccessThroughType(BoundExpression receiver)
if (destinationType.Kind == SymbolKind.ArrayType)
{
return BindArrayCreationWithInitializer(diagnostics, null,
var arrayCreation = BindArrayCreationWithInitializer(diagnostics, null,
(InitializerExpressionSyntax)node, (ArrayTypeSymbol)destinationType,
ImmutableArray<BoundExpression>.Empty);
return CheckValue(arrayCreation, valueKind, diagnostics);
}
return BindUnexpectedArrayInitializer((InitializerExpressionSyntax)node, diagnostics, ErrorCode.ERR_ArrayInitToNonArrayType);
......
......@@ -4,6 +4,7 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.CSharp.UnitTests
......@@ -1697,5 +1698,31 @@ static void M()
Assert.Null(model.GetSymbolInfo(refInt).Symbol);
Assert.Null(model.GetTypeInfo(refInt).Type);
}
[WorkItem(17395, "https://github.com/dotnet/roslyn/issues/17453")]
[Fact]
public void Regression17395()
{
var source = @"
using System;
public class C
{
public void F()
{
ref int[] a = ref {1,2,3};
Console.WriteLine(a[0]);
}
}
";
var c = CreateCompilationWithMscorlib45AndCSruntime(source);
c.VerifyEmitDiagnostics(
// (8,27): error CS1510: A ref or out value must be an assignable variable
// ref int[] a = ref {1,2,3};
Diagnostic(ErrorCode.ERR_RefLvalueExpected, "{1,2,3}").WithLocation(8, 27)
);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册