Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure emit layer doesn't ignore diagnostics and dependencies for well known members. #65320

Merged
merged 2 commits into from
Nov 15, 2022
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
17 changes: 9 additions & 8 deletions src/Compilers/CSharp/Portable/CodeGen/CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ internal sealed partial class CodeGenerator
private readonly BoundStatement _boundBody;
private readonly ILBuilder _builder;
private readonly PEModuleBuilder _module;
private readonly DiagnosticBag _diagnostics;
private readonly BindingDiagnosticBag _diagnostics;
private readonly ILEmitStyle _ilEmitStyle;
private readonly bool _emitPdbSequencePoints;

Expand Down Expand Up @@ -85,7 +85,7 @@ public CodeGenerator(
BoundStatement boundBody,
ILBuilder builder,
PEModuleBuilder moduleBuilder,
DiagnosticBag diagnostics,
BindingDiagnosticBag diagnostics,
OptimizationLevel optimizations,
bool emittingPdb)
{
Expand All @@ -94,6 +94,7 @@ public CodeGenerator(
Debug.Assert(builder != null);
Debug.Assert(moduleBuilder != null);
Debug.Assert(diagnostics != null);
Debug.Assert(diagnostics.DiagnosticBag != null);

_method = method;
_boundBody = boundBody;
Expand Down Expand Up @@ -177,7 +178,7 @@ private LocalDefinition LazyReturnTemp
var localSymbol = new SynthesizedLocal(_method, _method.ReturnTypeWithAnnotations, SynthesizedLocalKind.FunctionReturnValue, bodySyntax);

result = _builder.LocalSlotManager.DeclareLocal(
type: _module.Translate(localSymbol.Type, bodySyntax, _diagnostics),
type: _module.Translate(localSymbol.Type, bodySyntax, _diagnostics.DiagnosticBag),
symbol: localSymbol,
name: null,
kind: localSymbol.SynthesizedKind,
Expand Down Expand Up @@ -338,27 +339,27 @@ private void HandleReturn()

private void EmitTypeReferenceToken(Cci.ITypeReference symbol, SyntaxNode syntaxNode)
{
_builder.EmitToken(symbol, syntaxNode, _diagnostics);
_builder.EmitToken(symbol, syntaxNode, _diagnostics.DiagnosticBag);
}

private void EmitSymbolToken(TypeSymbol symbol, SyntaxNode syntaxNode)
{
EmitTypeReferenceToken(_module.Translate(symbol, syntaxNode, _diagnostics), syntaxNode);
EmitTypeReferenceToken(_module.Translate(symbol, syntaxNode, _diagnostics.DiagnosticBag), syntaxNode);
}

private void EmitSymbolToken(MethodSymbol method, SyntaxNode syntaxNode, BoundArgListOperator optArgList, bool encodeAsRawDefinitionToken = false)
{
_builder.EmitToken(_module.Translate(method, syntaxNode, _diagnostics, optArgList, needDeclaration: encodeAsRawDefinitionToken), syntaxNode, _diagnostics, encodeAsRawDefinitionToken);
_builder.EmitToken(_module.Translate(method, syntaxNode, _diagnostics.DiagnosticBag, optArgList, needDeclaration: encodeAsRawDefinitionToken), syntaxNode, _diagnostics.DiagnosticBag, encodeAsRawDefinitionToken);
}

private void EmitSymbolToken(FieldSymbol symbol, SyntaxNode syntaxNode)
{
_builder.EmitToken(_module.Translate(symbol, syntaxNode, _diagnostics), syntaxNode, _diagnostics);
_builder.EmitToken(_module.Translate(symbol, syntaxNode, _diagnostics.DiagnosticBag), syntaxNode, _diagnostics.DiagnosticBag);
}

private void EmitSignatureToken(FunctionPointerTypeSymbol symbol, SyntaxNode syntaxNode)
{
_builder.EmitToken(_module.Translate(symbol).Signature, syntaxNode, _diagnostics);
_builder.EmitToken(_module.Translate(symbol).Signature, syntaxNode, _diagnostics.DiagnosticBag);
}

private void EmitSequencePointStatement(BoundSequencePoint node)
Expand Down
2 changes: 1 addition & 1 deletion src/Compilers/CSharp/Portable/CodeGen/EmitAddress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ private void EmitArrayElementAddress(BoundArrayAccess arrayAccess, AddressKind a
else
{
_builder.EmitArrayElementAddress(_module.Translate((ArrayTypeSymbol)arrayAccess.Expression.Type),
arrayAccess.Syntax, _diagnostics);
arrayAccess.Syntax, _diagnostics.DiagnosticBag);
}
}

Expand Down
12 changes: 7 additions & 5 deletions src/Compilers/CSharp/Portable/CodeGen/EmitArrayInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private void EmitArrayInitializers(ArrayTypeSymbol arrayType, BoundArrayInitiali
else
{
ImmutableArray<byte> data = this.GetRawData(initExprs);
_builder.EmitArrayBlockInitializer(data, inits.Syntax, _diagnostics);
_builder.EmitArrayBlockInitializer(data, inits.Syntax, _diagnostics.DiagnosticBag);

if (initializationStyle == ArrayInitializerStyle.Mixed)
{
Expand Down Expand Up @@ -236,8 +236,7 @@ private bool EnableEnumArrayBlockInitialization
{
get
{
var sustainedLowLatency = _module.Compilation.GetWellKnownTypeMember(WellKnownMember.System_Runtime_GCLatencyMode__SustainedLowLatency);
return sustainedLowLatency != null && sustainedLowLatency.ContainingAssembly == _module.Compilation.Assembly.CorLibrary;
return _module.Compilation.EnableEnumArrayBlockInitialization;
}
}

Expand Down Expand Up @@ -384,12 +383,15 @@ private bool TryEmitReadonlySpanAsBlobWrapper(NamedTypeSymbol spanType, BoundExp
return false;
}

var ctor = ((MethodSymbol?)this._module.Compilation.GetWellKnownTypeMember(WellKnownMember.System_ReadOnlySpan_T__ctor_Pointer));
var ctor = (MethodSymbol?)Binder.GetWellKnownTypeMember(this._module.Compilation, WellKnownMember.System_ReadOnlySpan_T__ctor_Pointer, _diagnostics, syntax: wrappedExpression.Syntax, isOptional: true);

if (ctor == null)
{
return false;
}

Debug.Assert(!ctor.HasUnsupportedMetadata);

if (wrappedExpression is BoundArrayCreation ac)
{
var arrayType = (ArrayTypeSymbol)ac.Type;
Expand Down Expand Up @@ -471,7 +473,7 @@ private bool TryEmitReadonlySpanAsBlobWrapper(NamedTypeSymbol spanType, BoundExp
return false;
}

_builder.EmitArrayBlockFieldRef(data, wrappedExpression.Syntax, _diagnostics);
_builder.EmitArrayBlockFieldRef(data, wrappedExpression.Syntax, _diagnostics.DiagnosticBag!);
_builder.EmitIntConstant(lengthForConstructor);

if (inPlace)
Expand Down
12 changes: 6 additions & 6 deletions src/Compilers/CSharp/Portable/CodeGen/EmitExpression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ private void EmitThisReferenceExpression(BoundThisReference thisRef)

private void EmitPseudoVariableValue(BoundPseudoVariable expression, bool used)
{
EmitExpression(expression.EmitExpressions.GetValue(expression, _diagnostics), used);
EmitExpression(expression.EmitExpressions.GetValue(expression, _diagnostics.DiagnosticBag), used);
}

private void EmitSequencePointExpression(BoundSequencePointExpression node, bool used)
Expand Down Expand Up @@ -995,7 +995,7 @@ private void EmitArrayElementLoad(BoundArrayAccess arrayAccess, bool used)
}
else
{
_builder.EmitArrayElementLoad(_module.Translate((ArrayTypeSymbol)arrayAccess.Expression.Type), arrayAccess.Expression.Syntax, _diagnostics);
_builder.EmitArrayElementLoad(_module.Translate((ArrayTypeSymbol)arrayAccess.Expression.Type), arrayAccess.Expression.Syntax, _diagnostics.DiagnosticBag);
}

EmitPopIfUnused(used);
Expand Down Expand Up @@ -1934,7 +1934,7 @@ private void EmitArrayCreationExpression(BoundArrayCreation expression, bool use
}
else
{
_builder.EmitArrayCreation(_module.Translate(arrayType), expression.Syntax, _diagnostics);
_builder.EmitArrayCreation(_module.Translate(arrayType), expression.Syntax, _diagnostics.DiagnosticBag);
}

if (expression.InitializerOpt != null)
Expand Down Expand Up @@ -2752,7 +2752,7 @@ private void EmitArrayElementStore(ArrayTypeSymbol arrayType, SyntaxNode syntaxN
}
else
{
_builder.EmitArrayElementStore(_module.Translate(arrayType), syntaxNode, _diagnostics);
_builder.EmitArrayElementStore(_module.Translate(arrayType), syntaxNode, _diagnostics.DiagnosticBag);
}
}

Expand Down Expand Up @@ -3111,7 +3111,7 @@ private void EmitModuleVersionIdStore(BoundModuleVersionId node)

private void EmitModuleVersionIdToken(BoundModuleVersionId node)
{
_builder.EmitToken(_module.GetModuleVersionId(_module.Translate(node.Type, node.Syntax, _diagnostics), node.Syntax, _diagnostics), node.Syntax, _diagnostics);
_builder.EmitToken(_module.GetModuleVersionId(_module.Translate(node.Type, node.Syntax, _diagnostics.DiagnosticBag), node.Syntax, _diagnostics.DiagnosticBag), node.Syntax, _diagnostics.DiagnosticBag);
}

private void EmitModuleVersionIdStringLoad(BoundModuleVersionIdString node)
Expand All @@ -3134,7 +3134,7 @@ private void EmitInstrumentationPayloadRootStore(BoundInstrumentationPayloadRoot

private void EmitInstrumentationPayloadRootToken(BoundInstrumentationPayloadRoot node)
{
_builder.EmitToken(_module.GetInstrumentationPayloadRoot(node.AnalysisKind, _module.Translate(node.Type, node.Syntax, _diagnostics), node.Syntax, _diagnostics), node.Syntax, _diagnostics);
_builder.EmitToken(_module.GetInstrumentationPayloadRoot(node.AnalysisKind, _module.Translate(node.Type, node.Syntax, _diagnostics.DiagnosticBag), node.Syntax, _diagnostics.DiagnosticBag), node.Syntax, _diagnostics.DiagnosticBag);
}

private void EmitSourceDocumentIndex(BoundSourceDocumentIndex node)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ private void EmitStackAllocInitializers(TypeSymbol type, BoundArrayInitializatio
ImmutableArray<byte> data = this.GetRawData(initExprs);
if (data.All(datum => datum == data[0]))
{
_builder.EmitStackAllocBlockInitializer(data, inits.Syntax, emitInitBlock: true, _diagnostics);
_builder.EmitStackAllocBlockInitializer(data, inits.Syntax, emitInitBlock: true, _diagnostics.DiagnosticBag);

if (initializationStyle == ArrayInitializerStyle.Mixed)
{
Expand All @@ -45,7 +45,7 @@ private void EmitStackAllocInitializers(TypeSymbol type, BoundArrayInitializatio
}
else if (elementType.SpecialType.SizeInBytes() == 1)
{
_builder.EmitStackAllocBlockInitializer(data, inits.Syntax, emitInitBlock: false, _diagnostics);
_builder.EmitStackAllocBlockInitializer(data, inits.Syntax, emitInitBlock: false, _diagnostics.DiagnosticBag);

if (initializationStyle == ArrayInitializerStyle.Mixed)
{
Expand Down
Loading