Skip to content

Commit

Permalink
Adjust UseSiteInfo methods to convey actual intent.
Browse files Browse the repository at this point in the history
  • Loading branch information
333fred committed Jun 25, 2024
1 parent c49f442 commit a3f0dcc
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1485,7 +1485,7 @@ private UseSiteInfo<AssemblySymbol> InitializeUseSiteDiagnostic(UseSiteInfo<Asse

if (useSiteInfo.DiagnosticInfo is object || !useSiteInfo.SecondaryDependencies.IsNullOrEmpty())
{
useSiteInfo = AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitialize(PrimaryDependency, useSiteInfo);
useSiteInfo = AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitializeFromDefault(PrimaryDependency, useSiteInfo);
}

_packedFlags.SetIsUseSiteDiagnosticPopulated();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,7 @@ internal override UseSiteInfo<AssemblySymbol> GetUseSiteInfo()

if (result.DiagnosticInfo is not null || !result.SecondaryDependencies.IsNullOrEmpty())
{
AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitialize(PrimaryDependency, result);
AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitializeFromSentinel(PrimaryDependency, result);
}

_flags.SetUseSiteDiagnosticPopulated();
Expand All @@ -930,7 +930,7 @@ internal override UseSiteInfo<AssemblySymbol> GetUseSiteInfo()
var result = uncommonFields._lazyCachedUseSiteInfo;
if (!result.IsInitialized)
{
uncommonFields._lazyCachedUseSiteInfo.InterlockedInitialize(primaryDependency, new UseSiteInfo<AssemblySymbol>(primaryDependency));
uncommonFields._lazyCachedUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency, new UseSiteInfo<AssemblySymbol>(primaryDependency));
result = uncommonFields._lazyCachedUseSiteInfo;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ private ImmutableArray<TypeWithAnnotations> GetDeclaredConstraintTypes(ConsList<
{
// we do not recognize these combinations as "unmanaged"
hasUnmanagedModreqPattern = false;
_lazyCachedConstraintsUseSiteInfo.InterlockedCompareExchange(primaryDependency: null, new UseSiteInfo<AssemblySymbol>(new CSDiagnosticInfo(ErrorCode.ERR_BindToBogus, this)));
_lazyCachedConstraintsUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency: null, new UseSiteInfo<AssemblySymbol>(new CSDiagnosticInfo(ErrorCode.ERR_BindToBogus, this)));
}

_lazyHasIsUnmanagedConstraint = hasUnmanagedModreqPattern.ToThreeState();
Expand Down Expand Up @@ -416,7 +416,7 @@ private GenericParameterConstraintHandleCollection GetConstraintHandleCollection
catch (BadImageFormatException)
{
constraints = default(GenericParameterConstraintHandleCollection);
_lazyCachedConstraintsUseSiteInfo.InterlockedCompareExchange(primaryDependency: null, new UseSiteInfo<AssemblySymbol>(new CSDiagnosticInfo(ErrorCode.ERR_BindToBogus, this)));
_lazyCachedConstraintsUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency: null, new UseSiteInfo<AssemblySymbol>(new CSDiagnosticInfo(ErrorCode.ERR_BindToBogus, this)));
}

return constraints;
Expand Down Expand Up @@ -689,7 +689,7 @@ private TypeParameterBounds GetBounds(ConsList<TypeParameterSymbol> inProgress)

diagnostics.Free();

_lazyCachedConstraintsUseSiteInfo.InterlockedCompareExchange(primaryDependency, useSiteInfo);
_lazyCachedConstraintsUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency, useSiteInfo);
Interlocked.CompareExchange(ref _lazyBounds, bounds, TypeParameterBounds.Unset);
}

Expand Down
8 changes: 6 additions & 2 deletions src/Compilers/Core/Portable/Binding/UseSiteInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ private void Initialize(DiagnosticInfo? diagnosticInfo, ImmutableHashSet<TAssemb
return info;
}

public void InterlockedCompareExchange(TAssemblySymbol? primaryDependency, UseSiteInfo<TAssemblySymbol> value)
public void InterlockedInitializeFromSentinel(TAssemblySymbol? primaryDependency, UseSiteInfo<TAssemblySymbol> value)
{
if ((object?)_info == Sentinel)
{
Expand All @@ -526,7 +526,11 @@ public void InterlockedCompareExchange(TAssemblySymbol? primaryDependency, UseSi
}
}

public UseSiteInfo<TAssemblySymbol> InterlockedInitialize(TAssemblySymbol? primaryDependency, UseSiteInfo<TAssemblySymbol> value)
/// <summary>
/// Atomically initializes the cache with the given value if it is currently fully default.
/// This <i>will not</i> initialize <see cref="CachedUseSiteInfo{TAssemblySymbol}.Uninitialized"/>.
/// </summary>
public UseSiteInfo<TAssemblySymbol> InterlockedInitializeFromDefault(TAssemblySymbol? primaryDependency, UseSiteInfo<TAssemblySymbol> value)
{
object? info = Compact(value.DiagnosticInfo, GetDependenciesToCache(primaryDependency, value));
Debug.Assert(info is object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1251,7 +1251,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE
End If

If useSiteInfo.DiagnosticInfo IsNot Nothing OrElse Not useSiteInfo.SecondaryDependencies.IsNullOrEmpty() Then
useSiteInfo = AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitialize(PrimaryDependency, useSiteInfo)
useSiteInfo = AccessUncommonFields()._lazyCachedUseSiteInfo.InterlockedInitializeFromDefault(PrimaryDependency, useSiteInfo)
End If

_packedFlags.SetIsUseSiteDiagnosticPopulated()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE
constraints = metadataReader.GetGenericParameter(_handle).GetConstraints()
Catch mrEx As BadImageFormatException
constraints = Nothing
_lazyCachedBoundsUseSiteInfo.InterlockedCompareExchange(primaryDependency:=Nothing, New UseSiteInfo(Of AssemblySymbol)(ErrorFactory.ErrorInfo(ERRID.ERR_UnsupportedType1, Me)))
_lazyCachedBoundsUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency:=Nothing, New UseSiteInfo(Of AssemblySymbol)(ErrorFactory.ErrorInfo(ERRID.ERR_UnsupportedType1, Me)))
End Try

If constraints.Count > 0 Then
Expand Down Expand Up @@ -298,7 +298,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE

diagnosticsBuilder.Free()

_lazyCachedBoundsUseSiteInfo.InterlockedCompareExchange(primaryDependency, useSiteInfo)
_lazyCachedBoundsUseSiteInfo.InterlockedInitializeFromSentinel(primaryDependency, useSiteInfo)
ImmutableInterlocked.InterlockedInitialize(_lazyConstraintTypes, GetConstraintTypesOnly(constraints))
End If

Expand Down

0 comments on commit a3f0dcc

Please sign in to comment.