Skip to content

Commit 2028508

Browse files
committed
Handle global methods in GetEmbeddedTypeForMember
1 parent d34406e commit 2028508

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/Compilers/CSharp/Portable/Emitter/NoPia/EmbeddedTypesManager.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,12 @@ protected override EmbeddedType GetEmbeddedTypeForMember(SymbolAdapter member, S
589589
Debug.Assert(member.AdaptedSymbol.IsDefinition);
590590
Debug.Assert(ModuleBeingBuilt.SourceModule.AnyReferencedAssembliesAreLinked);
591591

592+
if (member.AdaptedSymbol.OriginalDefinition is SynthesizedGlobalMethodSymbol)
593+
{
594+
// No need to embed an internal type from current assembly
595+
return null;
596+
}
597+
592598
NamedTypeSymbol namedType = member.AdaptedSymbol.ContainingType;
593599

594600
if (IsValidEmbeddableType(namedType, syntaxNodeOpt, diagnostics, this))

src/Compilers/CSharp/Test/Emit2/CodeGen/CodeGenNullCheckedParameterTests.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,5 +2029,44 @@ .maxstack 2
20292029
IL_0024: ret
20302030
}");
20312031
}
2032+
2033+
[Fact, WorkItem(58824, "https://github.com/dotnet/roslyn/issues/58824")]
2034+
public void TestWithEmbeddedReference()
2035+
{
2036+
var source = @"
2037+
using System;
2038+
2039+
C.M(""a"");
2040+
Console.Write(1);
2041+
try
2042+
{
2043+
C.M(null);
2044+
Console.Write(0);
2045+
}
2046+
catch
2047+
{
2048+
Console.Write(2);
2049+
}
2050+
2051+
class C
2052+
{
2053+
public static void M(string s!!)
2054+
{
2055+
}
2056+
}
2057+
";
2058+
var verifier = CompileAndVerify(source, references: new[] { TestReferences.SymbolsTests.NoPia.GeneralPia.WithEmbedInteropTypes(true) }, expectedOutput: "12");
2059+
verifier.VerifyDiagnostics();
2060+
verifier.VerifyIL("C.M", @"
2061+
{
2062+
// Code size 12 (0xc)
2063+
.maxstack 2
2064+
IL_0000: ldarg.0
2065+
IL_0001: ldstr ""s""
2066+
IL_0006: call ""ThrowIfNull""
2067+
IL_000b: ret
2068+
}
2069+
");
2070+
}
20322071
}
20332072
}

0 commit comments

Comments
 (0)