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

Add tests for GetInterfaceMap on static interface methods #90518

Merged
merged 11 commits into from
Aug 25, 2023

Conversation

hamarb123
Copy link
Contributor

@hamarb123 hamarb123 commented Aug 14, 2023

Fixes #90351.
Includes the currently single failing case from the comment #90351 (comment) - therefore I propose that all (/ or at least most) of the combinations are useful since they actually found a bug.
This probably can't be merged until it's fixed, or maybe that just needs to be disabled for now, but that's alright lol.

The failing case is the case which checks C2Implicit<string>'s implementations of I1<string>.G<T>. Previously, until recently when some other unrelated (to this) changes to static interface methods were made, many more cases were broken.

Related failure issues, which have had their tests disabled:

cc @jkotas

@ghost ghost added the community-contribution Indicates that the PR has been added by a community member label Aug 14, 2023
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Aug 14, 2023
@ghost
Copy link

ghost commented Aug 14, 2023

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

Issue Details

Adds a the tests for #90351.
Includes the currently single failing case from the comment #90351 (comment) - therefore I propose that all (/ or at least most) of the combinations are useful since they actually found a bug.
This probably can't be merged until it's fixed, or maybe that just needs to be disabled for now, but that's alright lol.

The failing case is the case which checks C2Implicit<string>'s implementations of I1<string>.G<T>. Previously, until recently when some other unrelated (to this) changes to static interface methods were made, many more cases were broken.

cc @jkotas

Author: hamarb123
Assignees: -
Labels:

area-System.Reflection, community-contribution, needs-area-label

Milestone: -

@jkotas jkotas removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Aug 14, 2023
@jkotas
Copy link
Member

jkotas commented Aug 14, 2023

maybe that just needs to be disabled for now, but that's alright lol.

I would recommend disabling the test against a new issue.

@hamarb123
Copy link
Contributor Author

I would recommend disabling the test against a new issue.

Is there a proper way to do this, or do I just need to skip the test manually? I ask because it's using an interesting setup, where it returns an IEnumerable<object[]> using yield as data for a [Theory]; presumably there's no way to do an [ActiveIssue] for just 1 of those cases?

@jkotas
Copy link
Member

jkotas commented Aug 15, 2023

Comment out the failing case and add // [ActiveIssue("https://github.com/dotnet/runtime/issues/12345")] in front of it.

@hamarb123
Copy link
Contributor Author

hamarb123 commented Aug 21, 2023

I also need to exclude some tests on mono by the looks of it (mono and coreclr seem to behave differently in some of the cases?), I will add an [ActiveIssue] for that when I make an issue for that too.

• Would be good to test these anyway
• Added to see if the failures on mono are with static interface methods only, or to do with default implementation methods
• Haven't opened an issue for this yet - will follow up with an issue & commit to add the issue link
@hamarb123 hamarb123 marked this pull request as draft August 22, 2023 09:03
Copy link
Member

@trylek trylek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great to me, thank you!

@hamarb123
Copy link
Contributor Author

hamarb123 commented Aug 23, 2023

If there is nothing else to do, please flip the PR from Draft to Ready to review.

I haven't opened the other issue yet, if you're alright with merging it without that issue then feel free, or if you wanted to open it that would be great since I'm struggling to run mono locally and therefore write a useful reproduction for the issue with specifics of which cases fail and what happens instead and what's expected.

@jkotas
Copy link
Member

jkotas commented Aug 23, 2023

For the tracking issue, it is fine to just link to the test that is disabled. You do not need to go the extra mile to extract the disabled test into a small repro.

@jkotas
Copy link
Member

jkotas commented Aug 24, 2023

/azp run runtime-extra-platforms

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@jkotas
Copy link
Member

jkotas commented Aug 25, 2023

Native aot compiler fails on the new tests with:

Process terminated. Assertion failed.
   at Internal.TypeSystem.MetadataVirtualMethodAlgorithm.ResolveInterfaceMethodToVirtualMethodOnType(MethodDesc interfaceMethod, MetadataType currentType) in /_/src/coreclr/tools/Common/TypeSystem/Common/MetadataVirtualMethodAlgorithm.cs:line 615
   at ILCompiler.LazyGenericsSupport.GraphBuilder.LookForVirtualOverrides(EcmaMethod method) in /_/src/coreclr/tools/Common/Compiler/GenericCycleDetection/GraphBuilder.cs:line 129
   at ILCompiler.LazyGenericsSupport.GraphBuilder..ctor(EcmaModule assembly) in /_/src/coreclr/tools/Common/Compiler/GenericCycleDetection/GraphBuilder.cs:line 62
   at ILCompiler.LazyGenericsSupport.CycleInfoHashtable.CreateValueFromKey(EcmaModule key) in /_/src/coreclr/tools/Common/Compiler/GenericCycleDetection/ModuleCycleInfo.cs:line 52
   at Internal.TypeSystem.LockFreeReaderHashtable`2.CreateValueAndEnsureValueIsInTable(TKey key) in /_/src/coreclr/tools/Common/TypeSystem/Common/Utilities/LockFreeReaderHashtable.cs:line 562
   at ILCompiler.LazyGenericsSupport.GenericCycleDetector.FormsCycle(TypeSystemEntity entity, ModuleCycleInfo& cycleInfo) in /_/src/coreclr/tools/Common/Compiler/GenericCycleDetection/ModuleCycleInfo.cs:line 194
   at ILCompiler.LazyGenericsSupport.GenericCycleDetector.DetectCycle(TypeSystemEntity owner, TypeSystemEntity referent) in /_/src/coreclr/tools/Common/Compiler/GenericCycleDetection/ModuleCycleInfo.cs:line 230
   at Internal.IL.ILImporter.GetMethodEntrypoint(MethodDesc method) in /_/src/coreclr/tools/aot/ILCompiler.Compiler/IL/ILImporter.Scanner.cs:line 257
   at Internal.IL.ILImporter.ImportCall(ILOpcode opcode, Int32 token) in /_/src/coreclr/tools/aot/ILCompiler.Compiler/IL/ILImporter.Scanner.cs:line 642
   at Internal.IL.ILImporter.ImportBasicBlock(BasicBlock basicBlock) in /_/src/coreclr/tools/Common/TypeSystem/IL/ILImporter.cs:line 424
   at Internal.IL.ILImporter.ImportBasicBlocks() in /_/src/coreclr/tools/Common/TypeSystem/IL/ILImporter.cs:line 308
   at Internal.IL.ILImporter.Import() in /_/src/coreclr/tools/aot/ILCompiler.Compiler/IL/ILImporter.Scanner.cs:line 166
   at ILCompiler.ILScanner.CompileSingleMethod(ScannedMethodNode methodCodeNodeNeedingCode) in /_/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/ILScanner.cs:line 122
   at System.Threading.Tasks.Parallel.<>c__DisplayClass19_0`2.<ForWorker>b__1(RangeWorker& currentWorker, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
   at System.Threading.Tasks.TaskReplicator.Replica.Execute()
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

I am going to push a fix for this crash.

@jkotas
Copy link
Member

jkotas commented Aug 25, 2023

/azp run runtime-extra-platforms

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Member

@jkotas jkotas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@jkotas jkotas merged commit 17bae6c into dotnet:main Aug 25, 2023
@ghost ghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-System.Reflection community-contribution Indicates that the PR has been added by a community member
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Exception on MakeGenericMethod called on a static interface method from GetInterfaceMap's TargetMethods
3 participants