Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ bool Cci.IMethodDefinition.RequiresSecurityObject
CheckDefinitionInvariant();

ImmutableArray<CSharpAttributeData> userDefined = AdaptedMethodSymbol.GetReturnTypeAttributes();
ArrayBuilder<SynthesizedAttributeData> synthesized = null;
ArrayBuilder<CSharpAttributeData> synthesized = null;
AdaptedMethodSymbol.AddSynthesizedReturnTypeAttributes((PEModuleBuilder)context.Module, ref synthesized);

// Note that callers of this method (CCI and ReflectionEmitter) have to enumerate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(PEModuleBuil
CheckDefinitionInvariant();

ImmutableArray<CSharpAttributeData> userDefined = this.GetAttributes();
ArrayBuilder<SynthesizedAttributeData> synthesized = null;
ArrayBuilder<CSharpAttributeData> synthesized = null;
this.AddSynthesizedAttributes(moduleBuilder, ref synthesized);

if (emittingRefAssembly && !HasReferenceAssemblyAttribute)
Expand Down
6 changes: 3 additions & 3 deletions src/Compilers/CSharp/Portable/Emitter/Model/SymbolAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ internal IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(PEModuleBuil
Debug.Assert(this.Kind != SymbolKind.Assembly);

ImmutableArray<CSharpAttributeData> userDefined;
ArrayBuilder<SynthesizedAttributeData> synthesized = null;
ArrayBuilder<CSharpAttributeData> synthesized = null;
userDefined = this.GetAttributes();
this.AddSynthesizedAttributes(moduleBuilder, ref synthesized);

Expand All @@ -110,7 +110,7 @@ internal IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(PEModuleBuil
/// </summary>
internal IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(
ImmutableArray<CSharpAttributeData> userDefined,
ArrayBuilder<SynthesizedAttributeData> synthesized,
ArrayBuilder<CSharpAttributeData> synthesized,
bool isReturnType,
bool emittingAssemblyAttributesInNetModule)
{
Expand All @@ -127,7 +127,7 @@ internal IEnumerable<CSharpAttributeData> GetCustomAttributesToEmit(

private IEnumerable<CSharpAttributeData> GetCustomAttributesToEmitIterator(
ImmutableArray<CSharpAttributeData> userDefined,
ArrayBuilder<SynthesizedAttributeData> synthesized,
ArrayBuilder<CSharpAttributeData> synthesized,
bool isReturnType,
bool emittingAssemblyAttributesInNetModule)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ internal IteratorConstructor(StateMachineTypeSymbol container)
SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 0, RefKind.None, GeneratedNames.MakeStateMachineStateFieldName()));
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -757,7 +757,7 @@ internal BaseMethodWrapperSymbol(NamedTypeSymbol containingType, MethodSymbol me
AssignTypeMapAndTypeParameters(typeMap, typeParameters);
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,5 +85,7 @@ public sealed override ImmutableArray<CSharpAttributeData> GetAttributes()
public sealed override bool AreLocalsZeroed => KickoffMethod.AreLocalsZeroed;

internal override bool HasCodeAnalysisEmbeddedAttribute => false;

internal override bool HasCompilerLoweringPreserveAttribute => false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public SynthesizedStateMachineDebuggerHiddenMethod(
{
}

internal sealed override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal sealed override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
var compilation = this.DeclaringCompilation;
AddSynthesizedAttribute(ref attributes, compilation.TrySynthesizeAttribute(WellKnownMember.System_Diagnostics_DebuggerHiddenAttribute__ctor));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ protected override void MethodChecks(BindingDiagnosticBag diagnostics)
// TODO: move more functionality into here, making these symbols more lazy
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ internal sealed override IEnumerable<FieldSymbol> GetFieldsToEmit()

internal sealed override bool HasCodeAnalysisEmbeddedAttribute => false;

internal sealed override bool HasCompilerLoweringPreserveAttribute => false;

internal sealed override bool IsInterpolatedStringHandlerType => false;

internal sealed override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ private static ImmutableArray<Symbol> CreateMembers(MethodSymbol constructor, Me

public override ImmutableArray<TypeParameterSymbol> TypeParameters { get; }

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public override bool IsImplicitlyDeclared
get { return true; }
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ internal override bool IsMetadataFinal
}
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
// Do not call base.AddSynthesizedAttributes.
// Dev11 does not emit DebuggerHiddenAttribute in property accessors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ internal sealed override bool IsMetadataNewSlot(bool ignoreInterfaceImplementati
return false;
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ public override IEnumerable<string> MemberNames
get { return _nameToSymbols.Keys; }
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ internal override bool GetGuidString(out string? guidString)

internal sealed override bool HasCodeAnalysisEmbeddedAttribute => false;

internal sealed override bool HasCompilerLoweringPreserveAttribute => false;

internal sealed override bool IsInterpolatedStringHandlerType => false;

internal sealed override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,23 @@ public bool HasSkipLocalsInitAttribute
}
}
#endregion

#region CompilerLoweringPreserveAttribute
private bool _hasCompilerLoweringPreserveAttribute;
public bool HasCompilerLoweringPreserveAttribute
{
get
{
VerifySealed(expected: true);
return _hasCompilerLoweringPreserveAttribute;
}
set
{
VerifySealed(expected: false);
_hasCompilerLoweringPreserveAttribute = value;
SetDataStored();
}
}
#endregion
}
}
2 changes: 2 additions & 0 deletions src/Compilers/CSharp/Portable/Symbols/ErrorTypeSymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,8 @@ internal override bool GetGuidString(out string? guidString)

internal override bool HasCodeAnalysisEmbeddedAttribute => false;

internal override bool HasCompilerLoweringPreserveAttribute => false;

internal override bool IsInterpolatedStringHandlerType => false;

internal override ImmutableArray<NamedTypeSymbol> InterfacesNoUseSiteDiagnostics(ConsList<TypeSymbol>? basesBeingResolved)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1653,12 +1653,12 @@ internal override OverriddenOrHiddenMembersResult OverriddenOrHiddenMembers
}
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
throw ExceptionUtilities.Unreachable();
}

internal override void AddSynthesizedReturnTypeAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedReturnTypeAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
throw ExceptionUtilities.Unreachable();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ private sealed class UncommonProperties
internal NamedTypeSymbol lazyComImportCoClassType = ErrorTypeSymbol.UnknownResultType;
internal CollectionBuilderAttributeData lazyCollectionBuilderAttributeData = CollectionBuilderAttributeData.Uninitialized;
internal ThreeState lazyHasEmbeddedAttribute = ThreeState.Unknown;
internal ThreeState lazyHasCompilerLoweringPreserveAttribute = ThreeState.Unknown;
internal ThreeState lazyHasInterpolatedStringHandlerAttribute = ThreeState.Unknown;
internal ThreeState lazyHasRequiredMembers = ThreeState.Unknown;

Expand Down Expand Up @@ -468,6 +469,25 @@ internal override bool HasCodeAnalysisEmbeddedAttribute
}
}

internal override bool HasCompilerLoweringPreserveAttribute
{
get
{
var uncommon = GetUncommonProperties();
if (uncommon == s_noUncommonProperties)
{
return false;
}

if (!uncommon.lazyHasCompilerLoweringPreserveAttribute.HasValue())
{
uncommon.lazyHasCompilerLoweringPreserveAttribute = ContainingPEModule.Module.HasCompilerLoweringPreserveAttribute(_handle).ToThreeState();
}

return uncommon.lazyHasCompilerLoweringPreserveAttribute.Value();
}
}

internal override NamedTypeSymbol BaseTypeNoUseSiteDiagnostics
{
get
Expand Down
4 changes: 2 additions & 2 deletions src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1148,7 +1148,7 @@ internal virtual bool SynthesizesLoweredBoundBody
/// <summary>
/// Build and add synthesized return type attributes for this method symbol.
/// </summary>
internal virtual void AddSynthesizedReturnTypeAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal virtual void AddSynthesizedReturnTypeAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
if (this.ReturnsByRefReadonly)
{
Expand Down Expand Up @@ -1266,7 +1266,7 @@ public override int GetHashCode()
}

#nullable enable
protected static void AddRequiredMembersMarkerAttributes(ref ArrayBuilder<SynthesizedAttributeData> attributes, MethodSymbol methodToAttribute)
protected static void AddRequiredMembersMarkerAttributes(ref ArrayBuilder<CSharpAttributeData> attributes, MethodSymbol methodToAttribute)
{
if (methodToAttribute.ShouldCheckRequiredMembers() && methodToAttribute.ContainingType.HasAnyRequiredMembers)
{
Expand Down
2 changes: 2 additions & 0 deletions src/Compilers/CSharp/Portable/Symbols/NamedTypeSymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1149,6 +1149,8 @@ internal NamedTypeSymbol GetUnboundGenericTypeOrSelf()

internal abstract bool HasAsyncMethodBuilderAttribute(out TypeSymbol builderArgument);

internal abstract bool HasCompilerLoweringPreserveAttribute { get; }

/// <summary>
/// Gets a value indicating whether this type has System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute or not.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ internal override bool Equals(TypeSymbol? other, TypeCompareKind comparison)

public override int GetHashCode() => _underlyingType.GetHashCode();

internal override bool HasCompilerLoweringPreserveAttribute => false;

#if !DEBUG
void Cci.IReference.Dispatch(Cci.MetadataVisitor visitor)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -436,5 +436,7 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol? bui
builderArgument = null;
return false;
}

internal override bool HasCompilerLoweringPreserveAttribute => _underlyingType.HasCompilerLoweringPreserveAttribute;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ internal sealed override int? TypeLayoutOffset
}
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ internal override ObsoleteAttributeData ObsoleteAttributeData

internal override bool HasCodeAnalysisEmbeddedAttribute => false;

internal override bool HasCompilerLoweringPreserveAttribute => false;

internal override bool IsInterpolatedStringHandlerType => false;

internal sealed override NamedTypeSymbol AsNativeInteger() => throw ExceptionUtilities.Unreachable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1935,7 +1935,7 @@ internal override bool GetGuidString(out string guidString)
return guidString != null;
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ internal override (CSharpAttributeData?, BoundAttribute?) EarlyDecodeWellKnownAt
return base.EarlyDecodeWellKnownAttribute(ref arguments);
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);
AddRequiredMembersMarkerAttributes(ref attributes, this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public override Symbol AssociatedSymbol
}
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ protected sealed override void DecodeWellKnownAttributeImpl(ref DecodeWellKnownA
}
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData>? attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData>? attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ internal SourceFixedFieldSymbol(
Debug.Assert(this.IsFixedSizeBuffer);
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down Expand Up @@ -203,7 +203,7 @@ internal override FieldSymbol FixedElementField
get { return _internalField; }
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);
var compilation = ContainingSymbol.DeclaringCompilation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5327,7 +5327,7 @@ internal bool IsNullableEnabledForConstructorsAndInitializers(bool useStatic)
membersAndInitializers.IsNullableEnabledForInstanceConstructorsAndFields;
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ protected void TypeChecks(TypeSymbol type, BindingDiagnosticBag diagnostics)

public abstract bool HasInitializer { get; }

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1005,7 +1005,7 @@ internal override bool IsNullableAnalysisEnabled()
return flags.IsNullableAnalysisEnabled;
}

internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<SynthesizedAttributeData> attributes)
internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder<CSharpAttributeData> attributes)
{
base.AddSynthesizedAttributes(moduleBuilder, ref attributes);

Expand Down
Loading