未验证 提交 f33fb4bf 编写于 作者: M Manish Vasani 提交者: GitHub

Merge pull request #32895 from mavasani/Issue32855

Bail out for ref locals for unused value assignment analyzer
......@@ -6040,6 +6040,45 @@ int M()
#endif
return x;
}
}", optionName);
}
[WorkItem(32855, "https://github.com/dotnet/roslyn/issues/32855")]
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
[InlineData(nameof(PreferDiscard))]
[InlineData(nameof(PreferUnusedLocal))]
public async Task RefLocalInitialization(string optionName)
{
await TestMissingInRegularAndScriptAsync(
@"class Test
{
int[] data = { 0 };
void Method()
{
ref int [|target|] = ref data[0];
target = 1;
}
}", optionName);
}
[WorkItem(32855, "https://github.com/dotnet/roslyn/issues/32855")]
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
[InlineData(nameof(PreferDiscard))]
[InlineData(nameof(PreferUnusedLocal))]
public async Task RefLocalAssignment(string optionName)
{
await TestMissingInRegularAndScriptAsync(
@"class Test
{
int[] data = { 0 };
int Method()
{
ref int target = ref data[0];
[|target|] = 1;
return data[0];
}
}", optionName);
}
}
......
......@@ -412,6 +412,8 @@ private void AnalyzeOperationBlockEnd(OperationBlockAnalysisContext context)
SymbolUsageResult resultFromFlowAnalysis,
out ImmutableDictionary<string, string> properties)
{
Debug.Assert(!(symbol is ILocalSymbol local) || !local.IsRef);
properties = null;
// Bail out in following cases:
......
......@@ -216,6 +216,13 @@ public override void VisitDeconstructionAssignment(IDeconstructionAssignmentOper
public override void VisitLocalReference(ILocalReferenceOperation operation)
{
if (operation.Local.IsRef)
{
// Bail out for ref locals.
// We need points to analysis for analyzing writes to ref locals, which is currently not supported.
return;
}
OnReferenceFound(operation.Local, operation);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册