diff --git a/src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerManager.AnalyzerExecutionContext.cs b/src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerManager.AnalyzerExecutionContext.cs index fcbaa362fb8f2053dfa70b7f2c20789e0f038f00..2e9c14decccb5a36ea49a8590cf4f53f2d56fc29 100644 --- a/src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerManager.AnalyzerExecutionContext.cs +++ b/src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerManager.AnalyzerExecutionContext.cs @@ -139,7 +139,16 @@ HostSymbolStartAnalysisScope getSymbolAnalysisScopeCore() lock (_gate) { _lazyPendingMemberSymbolsMapOpt = _lazyPendingMemberSymbolsMapOpt ?? new Dictionary>(); - _lazyPendingMemberSymbolsMapOpt.Add(symbol, dependentSymbols); + + // Guard against entry added from another thread. + if (!_lazyPendingMemberSymbolsMapOpt.ContainsKey(symbol)) + { + _lazyPendingMemberSymbolsMapOpt.Add(symbol, dependentSymbols); + } + else + { + Debug.Assert(dependentSymbols.SetEquals(_lazyPendingMemberSymbolsMapOpt[symbol])); + } } }