Skip to content

Commit 80c7647

Browse files
authored
Merge pull request #38987 from mavasani/FixUnusedValueFalsePositive
Fix regression in RemoveUnusedParametersAndValues analyzer
2 parents f8b94e8 + 5980214 commit 80c7647

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/EditorFeatures/CSharpTest/RemoveUnusedParametersAndValues/RemoveUnusedValueAssignmentTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7149,5 +7149,32 @@ bool GetVal(out string val)
71497149
}
71507150
}");
71517151
}
7152+
7153+
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
7154+
public async Task TupleMember_UsedAfterContinueBranch()
7155+
{
7156+
await TestDiagnosticMissingAsync(
7157+
@"
7158+
using System;
7159+
using System.Collections.Generic;
7160+
7161+
public class Test
7162+
{
7163+
void M(List<(int, int)> list)
7164+
{
7165+
foreach (var (x, [|y|]) in list)
7166+
{
7167+
if (x != 0)
7168+
{
7169+
continue;
7170+
}
7171+
7172+
Console.Write(y);
7173+
}
7174+
}
7175+
}");
7176+
}
7177+
7178+
71527179
}
71537180
}

src/Workspaces/Core/Portable/FlowAnalysis/SymbolUsageAnalysis/SymbolUsageAnalysis.DataFlowAnalyzer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,17 @@ public override (BasicBlockAnalysisData fallThroughSuccessorData, BasicBlockAnal
127127
BasicBlockAnalysisData currentAnalysisData,
128128
CancellationToken cancellationToken)
129129
{
130+
// Ensure that we use distinct input BasicBlockAnalysisData instances with identical analysis data for both AnalyzeBranch invocations.
131+
using var savedCurrentAnalysisData = BasicBlockAnalysisData.GetInstance();
132+
savedCurrentAnalysisData.SetAnalysisDataFrom(currentAnalysisData);
133+
130134
var newCurrentAnalysisData = AnalyzeBranch(basicBlock.FallThroughSuccessor, basicBlock, currentAnalysisData, cancellationToken);
131135

132136
// Ensure that we use different instances of block analysis data for fall through successor and conditional successor.
133137
_analysisData.AdditionalConditionalBranchAnalysisData.SetAnalysisDataFrom(newCurrentAnalysisData);
134138
var fallThroughSuccessorData = _analysisData.AdditionalConditionalBranchAnalysisData;
135139

136-
var conditionalSuccessorData = AnalyzeBranch(basicBlock.ConditionalSuccessor, basicBlock, currentAnalysisData, cancellationToken);
140+
var conditionalSuccessorData = AnalyzeBranch(basicBlock.ConditionalSuccessor, basicBlock, savedCurrentAnalysisData, cancellationToken);
137141

138142
return (fallThroughSuccessorData, conditionalSuccessorData);
139143
}

0 commit comments

Comments
 (0)