Skip to content

Commit e3af843

Browse files
committed
Don't check constraint in explicit type argument scenario for now
1 parent 6317607 commit e3af843

File tree

3 files changed

+12
-58
lines changed

3 files changed

+12
-58
lines changed

src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4690,11 +4690,7 @@ private static bool AddReducedAndFilteredSymbol(
46904690
{
46914691
constructedMethod = method.ConstructIncludingExtension(typeArguments);
46924692
Debug.Assert((object)constructedMethod != null);
4693-
4694-
if (!checkConstraintsIncludingExtension(method, typeArguments, compilation, method.ContainingAssembly.CorLibrary.TypeConversions))
4695-
{
4696-
return false;
4697-
}
4693+
// PROTOTYPE we should check constraints
46984694
}
46994695
else
47004696
{
@@ -4746,46 +4742,6 @@ private static bool AddReducedAndFilteredSymbol(
47464742
}
47474743

47484744
throw ExceptionUtilities.UnexpectedValue(member.Kind);
4749-
4750-
static bool checkConstraintsIncludingExtension(MethodSymbol symbol, ImmutableArray<TypeWithAnnotations> typeArgs, CSharpCompilation compilation, TypeConversions conversions)
4751-
{
4752-
var diagnosticsBuilder = ArrayBuilder<TypeParameterDiagnosticInfo>.GetInstance();
4753-
ArrayBuilder<TypeParameterDiagnosticInfo>? useSiteDiagnosticsBuilder = null;
4754-
4755-
var constraintArgs = new ConstraintsHelper.CheckConstraintsArgs(compilation, conversions, includeNullability: false, NoLocation.Singleton, diagnostics: null, template: CompoundUseSiteInfo<AssemblySymbol>.Discarded);
4756-
4757-
bool success = true;
4758-
4759-
if (symbol.GetIsNewExtensionMember())
4760-
{
4761-
NamedTypeSymbol extensionDeclaration = symbol.ContainingType;
4762-
if (extensionDeclaration.Arity > 0)
4763-
{
4764-
var extensionTypeParameters = extensionDeclaration.TypeParameters;
4765-
var extensionTypeArguments = typeArgs[..extensionDeclaration.Arity];
4766-
var extensionSubstitution = new TypeMap(extensionTypeParameters, extensionTypeArguments);
4767-
4768-
success = extensionDeclaration.CheckConstraints(
4769-
constraintArgs, extensionSubstitution, extensionTypeParameters, extensionTypeArguments, diagnosticsBuilder,
4770-
nullabilityDiagnosticsBuilderOpt: null, ref useSiteDiagnosticsBuilder, ignoreTypeConstraintsDependentOnTypeParametersOpt: null);
4771-
}
4772-
}
4773-
4774-
if (success && symbol.Arity > 0)
4775-
{
4776-
var memberTypeParameters = symbol.TypeParameters;
4777-
var memberTypeArguments = typeArgs[^symbol.Arity..];
4778-
var memberSubstitution = new TypeMap(memberTypeParameters, memberTypeArguments);
4779-
4780-
success = symbol.CheckConstraints(
4781-
constraintArgs, memberSubstitution, memberTypeParameters, memberTypeArguments, diagnosticsBuilder,
4782-
nullabilityDiagnosticsBuilderOpt: null, ref useSiteDiagnosticsBuilder, ignoreTypeConstraintsDependentOnTypeParametersOpt: null);
4783-
}
4784-
4785-
diagnosticsBuilder.Free();
4786-
4787-
return success;
4788-
}
47894745
#nullable disable
47904746
}
47914747

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11098,7 +11098,7 @@ static class E
1109811098
var invocation = GetSyntax<InvocationExpressionSyntax>(tree, "new C<int>().M<int, string>()");
1109911099
Assert.Null(model.GetSymbolInfo(invocation).Symbol);
1110011100
Assert.Equal([], model.GetMemberGroup(invocation).ToTestDisplayStrings());
11101-
Assert.Equal([], model.GetMemberGroup(invocation.Expression).ToTestDisplayStrings());
11101+
Assert.Equal(["void E.<>E__0<System.Int32>.M<System.String>()"], model.GetMemberGroup(invocation.Expression).ToTestDisplayStrings());
1110211102
}
1110311103

1110411104
[Fact]
@@ -12851,7 +12851,7 @@ static class E1
1285112851
var model = comp.GetSemanticModel(tree);
1285212852
var memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "new C().M<object>");
1285312853
Assert.Equal("void E2.<>E__0.M<System.Object>()", model.GetSymbolInfo(memberAccess).Symbol.ToTestDisplayString());
12854-
Assert.Equal(["void E2.<>E__0.M<System.Object>()"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
12854+
Assert.Equal(["System.String Inner.E1.<>E__0.M<System.Object>()", "void E2.<>E__0.M<System.Object>()"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
1285512855
}
1285612856

1285712857
[Fact]
@@ -24885,7 +24885,7 @@ static class E
2488524885
Assert.Equal([], model.GetMemberGroup(invocation).ToTestDisplayStrings());
2488624886

2488724887
var memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "42.M<object>");
24888-
Assert.Equal([], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
24888+
Assert.Equal(["void E.<>E__0<System.Object>.M()"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
2488924889
}
2489024890

2489124891
[Fact]
@@ -25079,13 +25079,11 @@ public static void M2<T>(this int i, T t) where T : struct { }
2507925079
var model = comp.GetSemanticModel(tree);
2508025080
var memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "42.M<object>");
2508125081
Assert.Null(model.GetSymbolInfo(memberAccess).Symbol);
25082-
Assert.Equal([], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
25083-
Assert.Equal([], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
25082+
Assert.Equal(["void E.<>E__0.M<System.Object>(System.Object t)"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
2508425083

2508525084
memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "42.M2<object>");
2508625085
Assert.Null(model.GetSymbolInfo(memberAccess).Symbol);
25087-
Assert.Equal([], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
25088-
Assert.Equal([], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
25086+
Assert.Equal(["void System.Int32.M2<System.Object>(System.Object t)"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
2508925087
}
2509025088

2509125089
[Fact]
@@ -25446,10 +25444,10 @@ public static void M2<U>(this object o) where U : class { }
2544625444
var model = comp.GetSemanticModel(tree);
2544725445

2544825446
var memberAccess1 = GetSyntax<MemberAccessExpressionSyntax>(tree, "object.M<int>");
25449-
Assert.Equal([], model.GetMemberGroup(memberAccess1).ToTestDisplayStrings());
25447+
Assert.Equal(["void E.<>E__0.M<System.Int32>()"], model.GetMemberGroup(memberAccess1).ToTestDisplayStrings());
2545025448

2545125449
var memberAccess2 = GetSyntax<MemberAccessExpressionSyntax>(tree, "new object().M2<int>");
25452-
Assert.Equal([], model.GetMemberGroup(memberAccess2).ToTestDisplayStrings());
25450+
Assert.Equal(["void System.Object.M2<System.Int32>()"], model.GetMemberGroup(memberAccess2).ToTestDisplayStrings());
2545325451
}
2545425452

2545525453
[Fact]
@@ -25518,10 +25516,10 @@ public static void M2<T>(this T t) where T : class { }
2551825516
var model = comp.GetSemanticModel(tree);
2551925517

2552025518
var memberAccess1 = GetSyntax<MemberAccessExpressionSyntax>(tree, "int.M<int>");
25521-
Assert.Equal([], model.GetMemberGroup(memberAccess1).ToTestDisplayStrings());
25519+
Assert.Equal(["void E.<>E__0<System.Int32>.M()"], model.GetMemberGroup(memberAccess1).ToTestDisplayStrings());
2552225520

2552325521
var memberAccess2 = GetSyntax<MemberAccessExpressionSyntax>(tree, "42.M2<int>");
25524-
Assert.Equal([], model.GetMemberGroup(memberAccess2).ToTestDisplayStrings());
25522+
Assert.Equal(["void System.Int32.M2<System.Int32>()"], model.GetMemberGroup(memberAccess2).ToTestDisplayStrings());
2552525523
}
2552625524

2552725525
[Fact]

src/Compilers/CSharp/Test/Semantic/Semantics/DelegateTypeTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3018,7 +3018,7 @@ public void M<T>(object o) where T : class { }
30183018
var model = comp.GetSemanticModel(tree);
30193019
var memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "new C().M<int>");
30203020
Assert.Equal("void C.M<System.Int32>()", model.GetSymbolInfo(memberAccess).Symbol.ToTestDisplayString());
3021-
AssertEx.Equal(["void C.M<System.Int32>()"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
3021+
AssertEx.Equal(["void C.M<System.Int32>()", "void C.M<System.Int32>(System.Object o)"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
30223022
}
30233023

30243024
[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/69222")]
@@ -3142,7 +3142,7 @@ public static void M<T>(this T t, object ignored) where T : struct { }
31423142
var model = comp.GetSemanticModel(tree);
31433143
var memberAccess = GetSyntax<MemberAccessExpressionSyntax>(tree, "new object().M<object>");
31443144
Assert.Equal("void System.Object.M<System.Object>()", model.GetSymbolInfo(memberAccess).Symbol.ToTestDisplayString());
3145-
AssertEx.Equal(["void System.Object.M<System.Object>()"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
3145+
AssertEx.Equal(["void System.Object.M<System.Object>()", "void System.Object.M<System.Object>(System.Object ignored)"], model.GetMemberGroup(memberAccess).ToTestDisplayStrings());
31463146
}
31473147

31483148
[Theory, CombinatorialData]

0 commit comments

Comments
 (0)