Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add tests for `GetInterfaceMap` on static interface methods by hamarb123 · Pull Request #90518 · dotnet/runtime · GitHub
Skip to content

Add tests for GetInterfaceMap on static interface methods - #90518

Merged
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5
Aug 25, 2023
Merged

Add tests for GetInterfaceMap on static interface methods#90518
jkotas merged 11 commits into
dotnet:mainfrom
hamarb123:main5

Conversation

@hamarb123

@hamarb123hamarb123 commented Aug 14, 2023

Copy link
Copy Markdown
Contributor

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

@ghostghost added community-contribution Indicates that the PR has been added by a community member needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Aug 14, 2023
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs
@ghost

Copy link
Copy Markdown

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:-

@jkotasjkotas 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
Copy Markdown
Member

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
Copy Markdown
ContributorAuthor

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
Copy Markdown
Member

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

@hamarb123

hamarb123 commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

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
Comment threadsrc/libraries/System.Runtime/tests/System/Type/TypeTests.cs Outdated

@trylektrylek left a comment

Copy link
Copy Markdown
Member

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

hamarb123 commented Aug 23, 2023

Copy link
Copy Markdown
ContributorAuthor

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

jkotas commented Aug 23, 2023

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

Copy link
Copy Markdown
Member

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
Copy Markdown
Member

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotasjkotas left a comment

Copy link
Copy Markdown
Member

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:mainAug 25, 2023
@ghostghost locked as resolved and limited conversation to collaborators Sep 25, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates 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

4 participants

@hamarb123@jkotas@trylek@steveharter