Skip to content

Commit 70d0ced

Browse files
committed
Extensions: apply inconsistent accessibility check to static members too
1 parent 256273c commit 70d0ced

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/Compilers/CSharp/Portable/Symbols/Source/SourceMemberMethodSymbol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ protected void CheckEffectiveAccessibility(TypeWithAnnotations returnType, Immut
378378
}
379379
}
380380

381-
if (!IsStatic && this.GetIsNewExtensionMember() && ContainingType.ExtensionParameter is { } extensionParameter)
381+
if (this.GetIsNewExtensionMember() && ContainingType.ExtensionParameter is { } extensionParameter)
382382
{
383383
if (!extensionParameter.TypeWithAnnotations.IsAtLeastAsVisibleAs(this, ref useSiteInfo))
384384
{

src/Compilers/CSharp/Portable/Symbols/Source/SourcePropertySymbol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ internal override void AfterAddingTypeMembersChecks(ConversionsBase conversions,
707707
}
708708
}
709709

710-
if (!IsStatic && this.GetIsNewExtensionMember() && ContainingType.ExtensionParameter is { } extensionParameter &&
710+
if (this.GetIsNewExtensionMember() && ContainingType.ExtensionParameter is { } extensionParameter &&
711711
!this.IsNoMoreVisibleThan(extensionParameter.Type, ref useSiteInfo))
712712
{
713713
diagnostics.Add(ErrorCode.ERR_BadVisIndexerParam, Location, this, extensionParameter.Type);

src/Compilers/CSharp/Test/Emit3/Semantics/ExtensionTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3508,6 +3508,31 @@ private class C {}
35083508
);
35093509
}
35103510

3511+
[Fact]
3512+
public void ReceiverParameter_InconsistentTypeAccessibility_04()
3513+
{
3514+
var src = """
3515+
public static class Extensions
3516+
{
3517+
extension(C x)
3518+
{
3519+
public static void M() { }
3520+
public static int P { get => 0; set { } }
3521+
}
3522+
3523+
private class C { }
3524+
}
3525+
""";
3526+
var comp = CreateCompilation(src);
3527+
comp.VerifyEmitDiagnostics(
3528+
// (5,28): error CS0051: Inconsistent accessibility: parameter type 'Extensions.C' is less accessible than method 'Extensions.extension(Extensions.C).M()'
3529+
// public static void M() { }
3530+
Diagnostic(ErrorCode.ERR_BadVisParamType, "M").WithArguments("Extensions.extension(Extensions.C).M()", "Extensions.C").WithLocation(5, 28),
3531+
// (6,27): error CS0055: Inconsistent accessibility: parameter type 'Extensions.C' is less accessible than indexer 'Extensions.extension(Extensions.C).P'
3532+
// public static int P { get => 0; set { } }
3533+
Diagnostic(ErrorCode.ERR_BadVisIndexerParam, "P").WithArguments("Extensions.extension(Extensions.C).P", "Extensions.C").WithLocation(6, 27));
3534+
}
3535+
35113536
[Fact]
35123537
public void InconsistentTypeAccessibility_01()
35133538
{

0 commit comments

Comments
 (0)