-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Change CrossLoaderAllocatorHash
to not use the GC
#67160
Conversation
For |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @kouvel I'm still working my way through this code but here are some comments so far. Most of what I've looked at was good with minor questions/suggestions but the change in RareDisablePreemptiveGC did look worrisome. I'll continue reviewing tomorrow.
src/coreclr/inc/shash.h
Outdated
@@ -298,7 +323,7 @@ class EMPTY_BASES_DECL SHash : public TRAITS | |||
// it is perfectly fine for the element to be a duplicate - if so it | |||
// is added an additional time. Returns TRUE if a new empty spot was used; | |||
// FALSE if an existing deleted slot. | |||
static BOOL Add(element_t *table, count_t tableSize, const element_t &element); | |||
BOOL Add(element_t *table, count_t tableSize, const element_t &element) const; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't Add inherently a mutating operation? I don't understand the const keyword here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This private overload was previously static, I changed a couple of static functions to be instance functions with const because they needed to call RemoveElement
, which is an instance function, to support autoremove. In this case it would make sense to make it non-const in its implementation, fixed.
@@ -277,11 +314,11 @@ void SHash<TRAITS>::RemoveAll() | |||
} | |||
CONTRACT_END; | |||
|
|||
if (TRAITS::s_DestructPerEntryCleanupAction) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the destructor you preserved the previous behavior for Hashtables that had a DestructPerEntryCleanupAction but here the behavior changed. Is there a reason they are handled differently? If we revert to a single cleanup action then I expect this behavior would return to what it was before. If we stick with two separate ones it raises the question whether this change in behavior broke any code that previously expected to run the destruct action during RemoveAll() and now that doesn't happen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Technically it's not accurate to call the on-destruct cleanup action when the hash table is not being destructed in RemoveAll
. s_DestructPerEntryCleanupAction
isn't used with RemoveAll
currently or with any of the other functions that require s_supports_remove
. s_DestructPerEntryCleanupAction
may make sense in cases where the user of a hash table may want to manage the lifetime of elements separately until the hash table itself is destructed, so for RemoveAll
, similarly to Remove
, the expectation would be that the user manages the lifetime of removed elements. There is a case currently where s_DestructPerEntryCleanupAction
is being used with AddOrReplace
with the expectation that the replaced element does not trigger the cleanup action, so s_RemovePerEntryCleanupAction
would not be appropriate there:
runtime/src/coreclr/binder/applicationcontext.cpp
Lines 114 to 166 in 7d562f9
const SimpleNameToFileNameMapEntry *pExistingEntry = m_pTrustedPlatformAssemblyMap->LookupPtr(simpleName.GetUnicode()); | |
if (pExistingEntry != nullptr) | |
{ | |
// | |
// We want to store only the first entry matching a simple name we encounter. | |
// The exception is if we first store an IL reference and later in the string | |
// we encounter a native image. Since we don't touch IL in the presence of | |
// native images, we replace the IL entry with the NI. | |
// | |
if ((pExistingEntry->m_wszILFileName != nullptr && !isNativeImage) || | |
(pExistingEntry->m_wszNIFileName != nullptr && isNativeImage)) | |
{ | |
continue; | |
} | |
} | |
LPWSTR wszSimpleName = nullptr; | |
if (pExistingEntry == nullptr) | |
{ | |
wszSimpleName = new WCHAR[simpleName.GetCount() + 1]; | |
if (wszSimpleName == nullptr) | |
{ | |
GO_WITH_HRESULT(E_OUTOFMEMORY); | |
} | |
wcscpy_s(wszSimpleName, simpleName.GetCount() + 1, simpleName.GetUnicode()); | |
} | |
else | |
{ | |
wszSimpleName = pExistingEntry->m_wszSimpleName; | |
} | |
LPWSTR wszFileName = new WCHAR[fileName.GetCount() + 1]; | |
if (wszFileName == nullptr) | |
{ | |
GO_WITH_HRESULT(E_OUTOFMEMORY); | |
} | |
wcscpy_s(wszFileName, fileName.GetCount() + 1, fileName.GetUnicode()); | |
SimpleNameToFileNameMapEntry mapEntry; | |
mapEntry.m_wszSimpleName = wszSimpleName; | |
if (isNativeImage) | |
{ | |
mapEntry.m_wszNIFileName = wszFileName; | |
mapEntry.m_wszILFileName = pExistingEntry == nullptr ? nullptr : pExistingEntry->m_wszILFileName; | |
} | |
else | |
{ | |
mapEntry.m_wszILFileName = wszFileName; | |
mapEntry.m_wszNIFileName = pExistingEntry == nullptr ? nullptr : pExistingEntry->m_wszNIFileName; | |
} | |
m_pTrustedPlatformAssemblyMap->AddOrReplace(mapEntry); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s_DestructPerEntryCleanupAction isn't used with RemoveAll currently or with any of the other functions that require s_supports_remove
Do you mean that you have audited all usage of shash RemoveAll() in the runtime and determined that there is no overlap between RemoveAll() users and s_DestructPerEntryCleanupAction users?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe so, I added a static assert on all of those paths that s_DestructPerEntryCleanupAction
can't be true and it compiled, so if there were such a call it should have resulted in a compile error.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also looked at the few cases where s_DestructPerEntryCleanupAction
is set to true and didn't see anything like that. I think I had added the s_DestructPerEntryCleanupAction
check in RemoveAll
along with the slot backpatching change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I should learn to read the previous comments better. .... You're right. That does depend on the current OnDestruct behavior. Well. This is why its a C++ template.
src/coreclr/inc/shash.inl
Outdated
table[index] = TRAITS::Deleted(); | ||
m_tableCount--; | ||
RETURN; | ||
if (TRAITS::s_supports_autoremove && TRAITS::ShouldDelete(current)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (TRAITS::s_supports_autoremove && TRAITS::ShouldDelete(current)) | |
if ( (TRAITS::s_supports_autoremove && TRAITS::ShouldDelete(current)) || | |
(TRAITS::Equals(key, TRAITS::GetKey(current))) ) | |
{ | |
RemoveElement(table, tableSize, ¤t); | |
} |
I think the code in the else block has the identical effect as calling RemoveElement or did I miss a subtle difference?
src/coreclr/vm/appdomain.hpp
Outdated
@@ -1177,7 +1177,8 @@ class BaseDomain | |||
|
|||
// To be used when the thread may enter cooperative GC mode while holding the lock. The thread enters a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would add a comment like this. I want to make it clear that this code already appears to be unsafe.
// To be used when the thread may enter cooperative GC mode while holding the lock. The thread enters a | |
// BUGBUG: This holder creates a region of code where debugger suspension is | |
// prevented from completing. EE suspension may not be able to complete until | |
// debugger suspend finishes successfully (see "retry_for_debugger" in | |
// ThreadSuspend::SuspendEE). This means that any code inside this holder which | |
// waits for an EE suspension to complete directly or indirectly may deadlock. | |
// Although we haven't caught a live example of this issue under a debugger we | |
// have customer reports of issues which fit this description and code review shows | |
// that we have code paths inside this holder which invoke GC_TRIGGERS methods. | |
// Any further use of this holder should exercise great caution not to worsen the | |
// deadlock issue that is likely already present. Ideally we should be eliminating the | |
// forbid debugger suspend component of this holder or fixing the code that runs | |
// inside it to avoid any potential to block on EESuspend. |
src/coreclr/vm/crst.h
Outdated
// instance, some other thread may have started a GC and suspended for the debugger, then this thread allocates from the GC | ||
// and needs to perform a GC, so it waits for the other GC to complete. At that point debugger suspension cannot complete | ||
// because this thread is stuck inside the forbid region. So, this holder should not be used in cases that may allocate from | ||
// the GC. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need to modify this comment to say the code inside the holder can't block either directly or indirectly on EESuspend. GC allocation is one way that dependency could happen but there are other ways, such as a thread which does a preemptive->coop mode transition. Given that the stated purpose of the holder is to allow code to do a GC mode switch but also doing that transition risks deadlock we should probably comment up-front that there is no known safe+productive usage of this holder.
src/coreclr/vm/loaderallocator.cpp
Outdated
CONTRACTL_END; | ||
|
||
// Locks under which dependent handles may be used must all be taken here to ensure that a thread using a dependent handle | ||
// would either it cleared, or that the dependent object remains valid under those locks. In particular, any locks used to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// would either it cleared, or that the dependent object remains valid under those locks. In particular, any locks used to | |
// would either observe it cleared, or that the dependent object remains valid under those locks. In particular, any locks used to |
I think that is what you meant?
src/coreclr/vm/threadsuspend.cpp
Outdated
// debugger first, perhaps in a GC-unsafe point. This thread would not be able to suspend for the debugger and would | ||
// cause a deadlock during debugger suspension. When in the forbid region, allow disabling preemptive GC and bypass the | ||
// above heuristics. | ||
!IsInForbidSuspendForDebuggerRegion()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I am understanding this correctly this looks dangerous. The invariant of coop-mode is that threads can not run in this mode while the EE is suspended. This logic appears to say that invariant no longer applies to threads in a debugger suspend region. This means those threads could do things such as GC allocations, manipulate OBJECTREFs, or run managed code while an in-progress GC believes that all threads interacting with managed state are suspended.
If threads inside a debugger forbid suspend region are needlessly entering coop mode I think we should try to change their code path so that they stop entering coop mode. And if it is a requirement that they enter coop mode that presumably means they are doing something that is unsafe to be running concurrently with the GC and correctness requires them to block here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're right, this is not sufficient. This thread would have to be considered "not yet suspended", which is done currently for debugger suspension but not for GC suspension. I might just revert this part of the change for the forbid regions from this PR and look into it a bit closer separately.
src/coreclr/inc/shash.h
Outdated
// static void OnRemovePerEntryCleanupAction(ELEMENT& e) Called when an element is removed from the hashtable. | ||
// s_RemovePerEntryCleanupAction must be set to true if implemented. When elements | ||
// are removed in the destructor, OnDestructPerEntryCleanupAction() is called | ||
// instead if s_DestructPerEntryCleanupAction is true. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rather than having two different cleanup operations could we have a single cleanup operation with a boolean flag that says whether destruct also runs in the Remove() function? Having two of them makes it harder to know which one will run in which circumstances. I didn't notice that we have any scenario that depends on having both of the cleanup actions set simultaneously so it feels like this supports more options than our code needs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess either way it would be two flags, I think these names make it a bit more clear about when they run, that is the OnDestruct cleanup action only runs when the hash table is destructed with the expectation that the user manages the lifetime of elements until then, and the OnRemove cleanup action runs any time an element is removed, including when the hash table is destructed, enabling the cleanup action for full lifetime management of elements. I don't think it makes sense to use both at the same time, for now I've added a static assert ensuring that both can't be enabled.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at the existing uses of OnDestruct, they look like they would work just fine with the newer OnRemove model, and in fact are not really designed for the OnDestruct scenario. I'm not convinced we should keep OnDestruct at all.
Btw @kouvel, what did you use to produce those custom html diffs? They are very useful. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK I finished reviewing and the remainder of the code looked good. All the interesting comments were the ones I left last time. Thanks Kount!
} | ||
CONTRACTL_END; | ||
|
||
// Locks under which dependent handles may be used must all be taken here to ensure that a thread using a dependent handle |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works though it seems a little awkward that each new CrossLAHash has to insert its lock here and all lock owners will need to work out their proper ordering relative to each other even if their locks would never otherwise be taken at the same time. Its not a big deal with only two users but if we start accruing more we might want to switch to a different pattern. One possibility would be adding a method to CrossLAHash traits which runs a lamda synchronized against all other accesses to that hash (presumably by doing it under the lock they would have added here). Then the DependentHandle could invoke that traits function passing a lamda that will delete the native object and clear the field. This lets each handle take the lock appropriate for that hash rather than taking all locks simultaneously.
In any case, I'm fine with this as-is, this was just thoughts for the future.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed it's not ideal. The lambda approach is interesting but it might have an issue with lock ordering. Currently m_dependentHandleToNativeObjectSetCrst
is taken after the locks used for synchronizing access to the CrossLAHash instances. Since the handle cleanup code has to iterate the set of handles, it would have to first take m_dependentHandleToNativeObjectSetCrst
and then the traits method would acquire its lock in the opposite order. Still thinking about ways to improve it, but decided to keep it simple for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I noticed that and handwaved a bit that we could make a copy of the list before iterating it, or perhaps enter the lock to set a flag indicating that the LoaderAllocator is cleaning up so no new handles could be added. Happy to leave it how it is for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree its awkward, but I do not expect there to be many of these hashtables. They are quite expensive and complicated. I do not believe its worthwhile to invest in improving an api that works well enough, as it is.
I use Beyond Compare, it has a very useful feature to manually align things and produce diff reports. |
@noahfalk I have reverted changes relevant to forbid-suspend-for-debugger regions for this PR. I'll look into fixing that or removing it in a separate PR and will incorporate your other suggestions into that. |
`GCHeapHash`: - Replaced `GCHeapHash` usage with `SHash` - Added `s_supports_autoremove` to `SHash` to simulate `GCHeapHash`'s ability to remove elements while iterating them. When enabled, `SHash` calls `ShouldDelete()` on elements it walks during various operations and removes them if requested - Added an optional on-remove cleanup action for elements in `SHash` to ease cleanup of heap-allocated elements `CrossLoaderAllocatorHash`: - Added formal native types for internal data structures and hash table elements. The layout of the internal data structures is mostly the same as before. - Trackers are ref-counted since they may be inserted into multiple hash tables, and get deleted once their ref count reaches zero - Translated the current implementation. Used holders where necessary to handle OOMs gracefully. Miscellaneous: - Removed cooperative GC mode usage in the relevant places in slot backpatching and inline tracking, and removed usage of the forbid-suspend-for-debugger region in those places - Fixed a potential debugger suspend deadlock when entering cooperative GC mode inside a forbid-suspend-for-debugger region (which is only used in one place after this change) - When deleting call counters, reordered such that the runtime is suspended before the slot backpatching lock is acquired, to prevent the suspension code from suspending for the debugger while the lock is held and leading to FuncEval deadlocks Testing: - Memory usage is roughly the same as before, if anything it seems to be a bit lower - Perf is similar to before, no significant change - Ran a slot backpatching test including collectible assemblies in stress mode to look for issues
Looks like the failure is #66571 |
// must be used here to prevent deadlock. | ||
GCX_MAYBE_COOP(mayHaveEntryPointSlotsToBackpatch); | ||
bool mayHaveEntryPointSlotsToBackpatch = doPublish && pMethodDesc->MayHaveEntryPointSlotsToBackpatch(); | ||
MethodDescBackpatchInfoTracker::ConditionalLockHolder slotBackpatchLockHolder(mayHaveEntryPointSlotsToBackpatch); | ||
LockHolder codeVersioningLockHolder; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could you give these locals a different name that doesn't overlap with the uses above?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
commit 7bfc61b970e28f94782ef7c0cbcbbbc94ef9f5eb Author: Juan Hoyos <[email protected]> Date: Mon Apr 11 01:24:09 2022 -0700 Fix dbgshim entry in platform manifest (#67831) This fixes the official build - mono's dbgshim still ships from the runtime repo. commit 2087c07830770d3c7b8e8452e42a398b16ac0a0b Author: Dan Moseley <[email protected]> Date: Sun Apr 10 17:44:05 2022 -0600 Remove COM from profiler messages (#67774) * Remove COM from profiler messages * Remove COR_ mentions commit c1f6fb836fc2eeb8fecb233abbd8aa8e3de4a838 Author: Theodor Zoulias <[email protected]> Date: Mon Apr 11 02:30:05 2022 +0300 Take method, XML documentation corrections (#67812) The public T Take(); method doesn't throw OperationCanceledException. commit f4931fe0e530d7371ea98c5db13e90c61b56c410 Author: Viktor Hofer <[email protected]> Date: Mon Apr 11 00:48:47 2022 +0200 Delete dead code (#67648) commit 4e61fb11116393b9babdb029412eb37274cddf73 Author: Jan Kotas <[email protected]> Date: Sun Apr 10 12:04:55 2022 -0700 Delete dummy ==++== file headers (#67823) These file headers are leftovers from before open sourcing. We have missed cleaning them up in some files. commit cde7799901885d47c6c9c12dc3e2166d1a33d90a Author: Kunal Pathak <[email protected]> Date: Sun Apr 10 08:30:35 2022 -0700 Use CRT implementation of memset/memcpy (#67788) * Use CRT implementation of memset/memcpy * Remove the outdated comment: commit 4a8f23098702d7d8693c5673ed8d31a1af8e8d72 Author: Dan Moseley <[email protected]> Date: Sun Apr 10 09:29:43 2022 -0600 Remove dead strings from .rc files (#67817) commit 72dc5c5dc48089a0a2bd1c094483a4c743461cd5 Author: Jan Kotas <[email protected]> Date: Sat Apr 9 21:58:35 2022 -0700 Delete some Win9x-specific code and comments (#67814) commit 93c7c896c70737fb7b81480d11bba108fb0f7660 Author: creator1creeper1 <[email protected]> Date: Sat Apr 9 20:06:57 2022 +0200 GC: Correctly align `exclusive_sync.alloc_objects` (#67799) Previously, the calculation of the `cache_separator` size of the array failed to take the first member `rwp_object` into account. Therefore, `alloc_objects` was not properly aligned to `HS_CACHE_LINE_SIZE`. commit 1276f01a3df7cd467099e4a3a497147d10359988 Author: Alexander Köplinger <[email protected]> Date: Sat Apr 9 19:52:53 2022 +0200 [mono] Cleanup unused code and remove sparc and mips architectures (#67503) * Remove linux_magic.h * Remove dead files * Remove remap_keys() in assembly.c It is no longer needed. * Remove mono_dump_jit_offsets/mono_dump_metadata_offsets It was actually producing incorrect code, see https://github.com/mono/mono/issues/13689 This wasn't noticed because we're generating the offsets file via offsets-tool.py and that uses the correct target.platform_define which is passed to the script. The code in metadata-cross-helpers.c was only used as a verification helper but I don't think it has enough value to keep. * Remove leftover code from Mono.Simd * Remove leftover code from Mono.Tasklets * Remove unused functions in mono-proclib.c * Remove sparc and mips architecture * Disable the Vector4 SIMD fix, it causes an issue See https://github.com/dotnet/runtime/issues/67762 commit c1f6785534560c473e460d00251390c6573075e5 Author: Vladimir Sadov <[email protected]> Date: Sat Apr 9 10:43:53 2022 -0700 Fix for the elusive suspension hang on Win7 WOW64 (#67628) * Do not use CONTEXT_EXCEPTION_REQUEST anywhere except in EEGetThreadContext * a test for suspension livelock in concurrent stack producer-consumer scenario commit 107676e60c83bdd2da95b5e6200475c27c99e6ee Author: Lakshan Fernando <[email protected]> Date: Sat Apr 9 10:24:58 2022 -0700 Adding class target to RequiresDynamicCodeAttribute (#67778) * Adding class target to RequiresDynamicCodeAttribute * FB commit 063fca6ddb701e36dd45f4a613591ad3718ac271 Author: Jeff Handley <[email protected]> Date: Sat Apr 9 09:19:51 2022 -0700 FabricBot config: Viktor is back (#67787) commit 0c64bdf3afc1fdc9166ad6c22c1990d3e0a6c509 Author: Tomáš Rylek <[email protected]> Date: Sat Apr 9 16:03:45 2022 +0200 Always run CopyAllNativeProjectReferenceBinaries (#67718) Previously this target was only called from the recursive traversal used when globally copying native artifacts for all projects (this is used in the lab where the native artifacts are produced on a different machine than the managed test artifacts). In case of combined (local) test build we weren't running the target, only its dependencies (ResolveCMakeNativeProjectReference and ConsolidateNativeProjectReference); this used to be sufficient as these two targets handle all logic related to copying native components of a normal project, however I have recently added special logic for copying merged test wrapper native artifacts the CopyAllNativeProjectReferenceBinaries target and so we now must make sure it also always runs. Mark JIT optimization-sensitive tests as out-of-process and fix logic around skipping of out-of-process tests on the excluded platforms. Fix GetFilteredExcludeList to properly report out-of-process tests Add issues.targets exclusions for compat_i4_u_il_d / compat_i4_u_il_r on all Mono platforms Log timestamps in generated wrapper for investigation of timeouts Log timestamps around Crossgen2 invocations for investigation of timeouts Suppress noisy stderr spew for deletion of non-existent rsp files Expand test timeout to 30 minutes In the merged scenario we're intentionally reducing the number of work items at the expense of a single work item size. When Crossgen2 compilation is involved, with hundreds of tests in the Methodical_*** projects we're hitting the 15 minute test timeout so I'm bumping it up to 30. I have also suppressed uninteresting stderr spew from deletion of the pre-existing composite image. Thanks Tomas commit 3537bf20373e2c6fd01d4e2d477be1b6d5be51d9 Author: Michal Strehovský <[email protected]> Date: Sat Apr 9 22:37:52 2022 +0900 Remove Roslyn workaround in NativeAOT smoke test (#67795) Might not be needed after #67780. commit 1094cee7816d1f0433da14b74b491a9fbb2212de Author: Adeel Mujahid <[email protected]> Date: Sat Apr 9 16:37:05 2022 +0300 Update coding-style.md (#67801) * Remove mention of outdated formatting script and C++ language that was removed from libraries. * Move C# coding style at the top of document. commit c38f006577b673eb2de9742d00106edc74ffe9be Author: Stephen Toub <[email protected]> Date: Sat Apr 9 09:28:22 2022 -0400 Rewrite RegexPrefixAnalyzer.FindFirstCharClass (#67732) Every other analysis we use is on a recursion plan; this one is the last holdover that's still based on iteration maintaining its own custom stack of objects, making it difficult to comprehend the logic. As it turns out, it also has some bugs causing it to miss some cases, in particular where the pattern starts with an anchor followed by a negated set. This PR rewrites it to be simpler / recursive like the rest of our analyses. commit 45cc9d5954ecc3bccbff0ac87ad80a1862e71eb8 Author: Egor Bogatov <[email protected]> Date: Sat Apr 9 12:54:15 2022 +0300 Vectorize IndexOf for OrdinalIgnoreCase (#67758) Co-authored-by: Stephen Toub <[email protected]> commit 072d87b8c95cc7427a7a242c85d6b17950c7a074 Author: Jose Perez Rodriguez <[email protected]> Date: Fri Apr 8 22:43:54 2022 -0700 Re-adding some tests that were commented out now that IgnoreCase work is done (#67709) commit 71294e8176f48c7aecd40c849a40c2dec1d01bfd Author: Stephen Toub <[email protected]> Date: Sat Apr 9 00:28:49 2022 -0400 Update C# compiler and revert workaround * Update C# compiler to pick up attribute fix * Revert "Work around https://github.com/dotnet/roslyn/issues/60572" This reverts commit dc030a0362e3177389f4d4e73e1332c345eab891. commit 285b8259af30e255980b1ebfb2ddd60ca291a83a Author: Aleksey Kliger (λgeek) <[email protected]> Date: Fri Apr 8 23:30:15 2022 -0400 [runtime] copy updated byref nullables after invoke (#67652) * [runtime] copy updated byref nullables after invoke Bring back some code lost in https://github.com/dotnet/runtime/pull/60270 When a `null` is passed for a `ref Nullable<S>` argument to a runtime invoke, the invoke wrapper creates a default `Nullable` that should be copied back into the original arguments array of the invoke. There is code in the managed `Invoke` method to do some of the copying from the temporary array that is created for the Invoke (we pass a `Span<object>` over that array from managed to native), but in `mono_runtime_try_invoke_span` we create a C array `pa` that has the arguments (this takes care of by-value semantics for value types, for example). We need to copy the byref nullables back from `pa` to the span, so that managed code can then copy it back from the span to the original input array of the Invoke. Fixes https://github.com/dotnet/runtime/issues/67269 commit d09f42d1075ce9cedd0101df07c6f4861e03901c Author: Fan Yang <[email protected]> Date: Fri Apr 8 21:59:14 2022 -0400 [Mono]Enable emitting intrinsics for System.Numerics.Vector<T> on arm64 (#67125) * Enable emitting intrinsics for System.Numerics.Vector<T> on arm64 * Handle multiply by scalar * Fix typo * Add support for IsHardwareAccelerated * Move architecture specific code under corresponding functions * Resolve feedback * Fix scalar checking commit 35ff17525407006719454605d3ed206c38df9349 Author: Bruce Forstall <[email protected]> Date: Fri Apr 8 18:58:48 2022 -0700 Change SuperPMI asm diffs relocation handling (#67688) * Change SuperPMI asm diffs relocation handling Add new techniques for handling relocations to prevent spurious asm diffs. Especially, better handling for REL32 relocs on 64-bit targets, and specifically AMD64. With these changes, we should rarely if ever need to force REL32 relocs to fit (there is code that already does that, as a backstop). * Feedback * Feedback: break out of loops once `delta` has been determined commit c815ca5485093ce76d55e38c3d412f77254f59bb Author: Ankit Jain <[email protected]> Date: Fri Apr 8 21:56:46 2022 -0400 [wasm] Perf: Fixes for blazor_scenarios (#67414) * Bump sdk used for workload testing to 7.0.100-preview.4.22180.18 * Fix multiple issues for blazor scenarios run * Standardize on using $(payload)/dotnet, even for wasm runs .. which allows removing, and avoiding some special casing for wasm. Also, fix the work item names, and job names to indicate wasm/wasmaot. * performance-setup.sh: extra logging * cleanup commit 29a76ddafb62fd45ce70402724325ace750d9102 Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri Apr 8 20:37:55 2022 -0500 Update dependencies from https://github.com/dotnet/roslyn-analyzers build 20220407.3 (#67755) Microsoft.CodeAnalysis.NetAnalyzers From Version 7.0.0-preview1.22180.6 -> To Version 7.0.0-preview1.22207.3 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> commit 998a8a4bd5bd4854491142d8cef49dbfb6e30120 Author: Michal Strehovský <[email protected]> Date: Sat Apr 9 10:22:17 2022 +0900 Fix some minor reflection bugs (#67571) Found in System.Reflection tests. commit fabda703f9d237b99190f457aec10ef4165a30f8 Author: Bruce Forstall <[email protected]> Date: Fri Apr 8 17:33:27 2022 -0700 Fix a JIT formatting issue (#67785) commit 27fbbda5685ac01d48d33c5f2915b8ca65163e97 Author: Vitek Karas <[email protected]> Date: Fri Apr 8 16:10:58 2022 -0700 Update host tracing doc to match the current functionality (#67749) I rewrote the doc to act as a point-in-time documentation (instead of a proposal as before). Co-authored-by: Elinor Fung <[email protected]> commit ff6abfea0bb9b71eb3215157749047dd120a4d9f Author: Mike McLaughlin <[email protected]> Date: Fri Apr 8 13:59:46 2022 -0700 Remove dbgshim and related code (#67725) The dbgshim component has been moved to the diagnostics repo and ships out of band. Issue: https://github.com/dotnet/runtime/issues/65017 commit 79d9c420fc18b2e11bf26f62bdf7a7275aedab4d Author: Steve Harter <[email protected]> Date: Fri Apr 8 15:38:01 2022 -0500 Reflection Invoke refactoring to support future byref-like and IL emit features (#66357) commit b8dc04b445fc98d24fd92262364a9e5b5e23a5b9 Author: Larry Ewing <[email protected]> Date: Fri Apr 8 14:54:58 2022 -0500 Use properties for target versions for core and framework (#67717) * Populate target framework versions for tasks, and generated nugets based .. on other properties, instead of hardcoding the values. * Version substitution for MonoTargets nuget * Version substitution for MonoAOTCompiler nuget * sendhelixhelp.proj: Ensure that DotNetCliVersion gets overridden, as .. intended. This seems to have been broken by the condition being removed in https://github.com/dotnet/arcade/commit/cfdac3560f1c887780bac171df7c22f7805e6f40 from the `DotNetCliVersion` property, causing the value to always overridden again to `6.0.100`. And this breaks wasm aot/eat tests on helix: ``` /datadisks/disk1/work/A4EE08D9/p/build/wasm/WasmApp.Native.targets(569,5): error MSB4062: The "MonoAOTCompiler" task could not be loaded from the assembly /datadisks/disk1/work/A4EE08D9/p/build/MonoAOTCompiler/MonoAOTCompiler.dll. Could not load file or assembly 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. [/datadisks/disk1/work/A4EE08D9/w/B3AE0955/e/publish/ProxyProjectForAOTOnHelix.proj] /datadisks/disk1/work/A4EE08D9/p/build/wasm/WasmApp.Native.targets(569,5): error MSB4062: Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. ``` * Fix build for net7.0 Fails with: ``` src/tests/tracing/eventpipe/common/Microsoft.Diagnostics.NETCore.Client/DiagnosticsIpc/IpcSocket.cs(27,35): error CS0108: 'IpcSocket.AcceptAsync(CancellationToken)' hides inherited member 'Socket.AcceptAsync(CancellationToken)'. Use the new keyword if hiding was intended. [/__w/1/s/src/tests/tracing/eventpipe/common/Microsoft.Diagnostics.NETCore.Client/Microsoft.Diagnostics.NETCore.Client.csproj] ``` * Fix some more target frameworks * bump the workload sdk version * Revert "sendhelixhelp.proj: Ensure that DotNetCliVersion gets overridden, as" This reverts commit 426b4b19155d54a7f338140f4c87feec471b5d92. Last update to Arcade's XHarnessRunner.targets unconditionally set DotNetCliVersion, to workaround which this commit was added. But the update in this PR changed DotNetCliPackageType to `aspnetcore-runtime`, which makes the version from global.json - `6.0.100` incorrect for aspnetcore. And the next upcoming update will set versions explicitly and change the DotNetCliPackageType back to `sdk`. Instead, revert this. And don't use version from global.json for now, instead relying on the version that xharnesrunner.targets sets. Co-authored-by: Ankit Jain <[email protected]> commit aff3c1867b50d8a021c0a7b1df94f54a40cb44a5 Author: Juan Hoyos <[email protected]> Date: Fri Apr 8 12:02:49 2022 -0700 Fix cross dac packaging (#67710) commit 19475c2dc8a86e04525ce8781d819b1cfd4c0c2a Author: Badre BSAILA <[email protected]> Date: Fri Apr 8 20:44:11 2022 +0200 display tidy message for failed assertions (#67750) commit cef4ae17d91c278880f45f017e4272afe1f379b3 Author: Maryam Ariyan <[email protected]> Date: Fri Apr 8 14:16:17 2022 -0400 Add metrics for caching (#66479) commit 51afa067be9f0d00dac2c455ceb78e38eef1e239 Author: Qiao Pengcheng <[email protected]> Date: Sat Apr 9 01:58:36 2022 +0800 [LoongArch64] coreclr-jit directory (#62843) * Part6-1: add the coreclr-jit directory for LoongArch64. (#59561) Co-authored-by: Loongson's .NET-teams * [LoongArch64] add jit/CMakeLists.txt from #62889. * [LoongArch64] update LoongArch64 after merge from main. * [LoongArch64] Fix the error for "IsLoongArch64". * [LoongArch64] Fix the cross-compiling error. * [LoongArch64] Fixed the compiling errors after merge. * [LoongArch64] revert `src/coreclr/jit/ICorJitInfo_API_names.h`. * [LoongArch64] workround the compiling error on windows. * [LoongArch64] amend the code-format. * [LoongArch64] update by `git apply format.patch`. * [LoongArch64] Delete the interface getArgType2. And refactor the returned values of `getFieldSizeClassificationByHnd`. Keep aligned with #62893 `02ff4bfa41d7887b151d381e2697ba82ab6a0bca`. * [LoongArch64] update code by `git apply format.patch` And update `getLoongArch64PassStructInRegisterFlags`. * [LoongArch64] Fixed the error when passing float-arg by integer-reg. * [Loongarch64] amend patch formate by 'git apply format.patch' * [LoongArch64] update the version of the `LICENSE description`. * [LoongArch64] amend the CodeGen::genFnPrologCalleeRegArgs for the SC_IG_BUFFER_SIZE. * [LoongArch64]: update the crossgen2 within the JIT. * [LoongArch64] git-apply the `format.patch`. * [LoongArch64] Fix the compiling error after merge-main. * [LoongArch64] amend the code for reviewing by @BruceForstall. * [LoongArch64] apply the `format.patch`. * [LoongArch64] round 2 amend for reviewing by @BruceForstall. * [LoongArch64] round 3 amend for reviewing by @BruceForstall. * [LoongArch64] amend the format. * [LoongArch64] round 4 amending for reviewing. * [LoongArch64] add compiling the `clrjit_unix_loongarch64_*`. * [LoongArch64] delete unused code and amend the format. Also amend inst_Mov. * [LoongArch64] apply the format and fix compiling warning. * [LoongArch64] round 1 amend for reviewing by @kunalspathak. * [LoongArch64] merge fast-tail-call from main. * [LoongArch64] temp commit for windows compiling error. * [LoongArch64] amend format for reviewing. * [LoongArch64] amend the coding for LA-ABI's flags. * [LoongArch64] amend some missed CRs. * [LoongArch64] amend some code for CR. * [LoongArch64] amend some code for CR round2. * [LoongArch64] amend the output format of `emitDisInsName`. * [LoongArch64] remove the optimization for type-cast which depends on LoongArch64. * [LoongArch64] ament the code for CR. * [LoongArch64] amend some code for CR. * [LoongArch64] amend some code for CR round2. * [LoongArch64] amend some code for CR round3. * [LoongArch64] amend some code for CR round4. * [LoongArch64] amend some code for CR round5. * [LoongArch64] amend some code after refacting. * [LoongArch64] amend the compare and fix the error when running hello-world within debug-mode. Co-authored-by: qiaopengcheng <[email protected]> commit f89fbb96cabe95db5869e3d44c6b48c1c0f8fc1a Author: Drew Scoggins <[email protected]> Date: Fri Apr 8 09:51:23 2022 -0700 Add NoWASM to category filter (#67721) commit c9e0a3b2e8cb66349820ad3ede4dc35de7d74359 Author: Bruce Forstall <[email protected]> Date: Fri Apr 8 09:35:25 2022 -0700 Add JitDump output for calls to recordRelocation (#67639) E.g., ``` recordRelocation: 000001ECBD3AE28C (rw: 000001ECBD3AE28C) => 000001ECBD38BC04, type 16 (IMAGE_REL_BASED_DISP32), delta 0 ``` commit 20c4bde6b1b8b7afb173abf730a10eb10c6be55e Author: Krzysztof Wicher <[email protected]> Date: Fri Apr 8 17:35:18 2022 +0200 Further JsonPropertyInfo caching cleanup (#67754) commit eb223d8514fb0b3166cc0824d492ca3c0a5736ed Author: Stephen Toub <[email protected]> Date: Fri Apr 8 11:09:35 2022 -0400 Allow getting code coverage for the unit test project itself (#67736) This is helpful for our test projects that include source directly into them. You can now do `dotnet build /t:test /p:Coverage=true /p:CoverageIncludeTests=true` to include the test project in the analysis. commit dee2bb50f12e5d6ef16eee7ed944b0fb7ef27053 Author: Radek Zikmund <[email protected]> Date: Fri Apr 8 16:40:20 2022 +0200 Fix exception thrown from MsQuicStream writes when connection is aborted by peer. (#67651) * Fix exception thrown from MsQuicStream writes when connection is aborted by peer. * Code review feedback commit 3e5e118c5352d0c06444b7557652b8c280876d5b Author: Koundinya Veluri <[email protected]> Date: Fri Apr 8 07:20:18 2022 -0700 Change `CrossLoaderAllocatorHash` to not use the GC (#67160) * Change `CrossLoaderAllocatorHash` to not use the GC `GCHeapHash`: - Replaced `GCHeapHash` usage with `SHash` - Added `s_supports_autoremove` to `SHash` to simulate `GCHeapHash`'s ability to remove elements while iterating them. When enabled, `SHash` calls `ShouldDelete()` on elements it walks during various operations and removes them if requested - Added an optional on-remove cleanup action for elements in `SHash` to ease cleanup of heap-allocated elements `CrossLoaderAllocatorHash`: - Added formal native types for internal data structures and hash table elements. The layout of the internal data structures is mostly the same as before. - Trackers are ref-counted since they may be inserted into multiple hash tables, and get deleted once their ref count reaches zero - Translated the current implementation. Used holders where necessary to handle OOMs gracefully. Miscellaneous: - Removed cooperative GC mode usage in the relevant places in slot backpatching and inline tracking, and removed usage of the forbid-suspend-for-debugger region in those places - When deleting call counters, reordered such that the runtime is suspended before the slot backpatching lock is acquired, to prevent the suspension code from suspending for the debugger while the lock is held and leading to FuncEval deadlocks Testing: - Memory usage is roughly the same as before, if anything it seems to be a bit lower - Perf is similar to before, no significant change - Ran a slot backpatching test including collectible assemblies in stress mode to look for issues commit 322ea09acfaa1f334702fddba8b6d74bb2573805 Author: Stephen Toub <[email protected]> Date: Fri Apr 8 06:19:59 2022 -0400 Disable ClientAndServer_OneOrBothUseDefault_Ok test (#67737) commit 8e8a62156ea459945b1d953c4fbe950d276bbc9b Author: Tom Deseyn <[email protected]> Date: Fri Apr 8 10:30:12 2022 +0200 FileSystem: MoveDirectory: some improvements. (#65132) * FileSystem: MoveDirectory: some improvements. - Perform same file check after MoveFile/rename failed. - Unix: use LStat to instead of Stat so links are not followed. * Fix case-sensitive rename. commit e6c8d42cd6b4d6fb7dc35b7a02ff208e665e6cb0 Author: Trayan Zapryanov <[email protected]> Date: Fri Apr 8 11:22:37 2022 +0300 Replace 2 allocations from string.ToCharArray() with ReadOnlySpan in System.Private.Xml library (#67002) * Remove ToCharArray() used in BinHexDecoder * Replace ToCharArray() used in XmlSerializationReader with Span * Address feedback * Remove not necessary check for null * Remove OutOfMemoryException catch Co-authored-by: Trayan Zapryanov <[email protected]> commit 9cb6475516b94aff3d35c67eab579ceb351899b9 Author: Vlad Brezae <[email protected]> Date: Fri Apr 8 11:02:37 2022 +0300 [mono][interp] Fix corruption of the LMF chain (#67663) * [mono][interp] Fix corruption of the LMF chain If multiple lmf's were unwinded during EH, by pop'ing ext, we were pushing one of them back. This was leading to hangs, since we could end up with a lmf that has itself as a previous lmf. Other weird behavior was also possible. * Re-enable test commit 7c21927c257f8eff7ceb3f3c0fd4ee2c8fe6c414 Author: Tanner Gooding <[email protected]> Date: Fri Apr 8 00:07:28 2022 -0700 Updating generic math to support user-defined checked operators (#67714) * Uncomment the user-defined checked operators for generic math * Change SA1000 to be a suggestion until https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3478 can be resolved * Regenerating the System.Runtime ref assembly * Adding tests covering user-defined checked operators in generic math * Remove the checked() context from integer division, since there is no behavioral difference on .NET * Ensure the doc comments around user-defined checked operators are uncommented * Fix some doc comments that shouldn't have been uncommented yet commit c093bb8f2a6f602943affbda995ce860ef25f494 Author: Maoni Stephens <[email protected]> Date: Thu Apr 7 23:50:39 2022 -0700 need to check if the child obj is on an ro region (#67729) when we check if a card is needed, we need to check if the child obj is in an ro region before getting its gen_num since there's no region data structure for it. commit 1a31bf638c6c220d20ef65f43a07a9ac562d92d9 Author: Michal Strehovský <[email protected]> Date: Fri Apr 8 14:25:34 2022 +0900 Fix generation of type forwarders (#67570) These need to be interned to account for nested forwarders. We were erroneously generating multiple containing forwarders whenever there's a nested one. commit c585bd7abd20d39f2c5bd08bca05b7f5280f1f26 Author: Bruce Forstall <[email protected]> Date: Thu Apr 7 22:23:17 2022 -0700 Temporarily disable assert to avoid #67600 (#67711) commit 244aa7ae7c3ea29821c3a500933d78161c5f470a Author: Ankit Jain <[email protected]> Date: Fri Apr 8 01:22:21 2022 -0400 [wasm] Add support for installing latest sdk for workload testing (#67606) `$(SdkVersionForWorkloadTesting)` can be set to use a specific version. This is used with workload testing for Wasm.Build.Tests, and with perf pipeline. commit 4c9065074269dd769b08749435e1e0952b3e0c99 Author: Michal Strehovský <[email protected]> Date: Fri Apr 8 14:20:08 2022 +0900 Improve reflection rooting generic methods (#67572) When we need to reflection-root a generic method on a generic type (without being told the exact instantiaton and falling back to trying something that works), try to find a fitting generic method instantiation on a fitting generic type. Previously we would give up if we had to guess the owning type. commit 120da3e6081b27533d0e02fdcf529db1a35c0d8e Author: Michal Strehovský <[email protected]> Date: Fri Apr 8 14:16:28 2022 +0900 Make it possible to do typeof of function pointers (#67573) We would previously generate a method body that throws InvalidProgramException. Do what CoreCLR does and pretend it was an IntPtr. There's an odd System.Reflection test that tests kind of this because yeah IntPtr is public: https://github.com/dotnet/runtime/blob/3e01d11fd1722450d326f90b4913f3831ce132bb/src/libraries/System.Reflection/tests/TypeInfoTests.cs#L1217-L1222. commit 457796f3c76788c79bc2fa9b14cccd0d5b89f691 Author: Michal Strehovský <[email protected]> Date: Fri Apr 8 14:15:13 2022 +0900 Don't detect link on path (#67525) If we're in a poisoned environment (set up for non-x64 Windows SDK), we would successfully detect a link.exe but then crash when actually running it. Remove the detection, we rarely succeed with it anyway; always run vcvarsall. Fixes #64135. commit bed8bc7094f24360256ee4c014da3c5cadc2e3d2 Author: Maksym Koshovyi <[email protected]> Date: Fri Apr 8 05:39:06 2022 +0300 [Group 7] Enable nullable annotations for `Microsoft.Extensions.Logging.Console` (#67459) * First pass * DisallowNull * Update ctor for ConsoleLoggerProcessor * Update ctor for ConsoleLogger * formatters can be null * Update src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerProvider.cs Co-authored-by: Eric Erhardt <[email protected]> * Update src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerProcessor.cs Co-authored-by: Eric Erhardt <[email protected]> * Remove `#nullable enable` Co-authored-by: Eric Erhardt <[email protected]> commit 3b7303af3a917cd9c78cd7194efdb1baf90ea4d9 Author: Ankit Jain <[email protected]> Date: Thu Apr 7 21:52:24 2022 -0400 [wasm] Bundle net472 dependencies for MonoAOTCompiler task (#67719) .. same as what we do for WasmAppBuilder, and MonoTargets. Without this, it would work if msbuild/VS happened to load the expected System.Reflection.Metadata assembly before loading the task. But break when it didn't. And that breakage happens with 7.0*p3 with VS 17.2 . msbuild, and VS break with: ``` The "MonoAOTCompiler" task failed unexpectedly.System.IO.FileNotFoundException: Could not load file or assembly 'System.Reflection.Metadata, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.File name: 'System.Reflection.Metadata, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' at MonoAOTCompiler.FilterAssemblies(IEnumerable`1 assemblies) at MonoAOTCompiler.ExecuteInternal() at MonoAOTCompiler.Execute() at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() WRN: Assembly binding logging is turned OFF.To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.Note: There is some performance penalty associ ated with assembly bind failure logging.To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]. ``` These are the files bundled for net472 now: ``` tasks/net472/Microsoft.Bcl.AsyncInterfaces.dll tasks/net472/Microsoft.Build.dll tasks/net472/Microsoft.Build.Framework.dll tasks/net472/Microsoft.Build.Tasks.Core.dll tasks/net472/Microsoft.Build.Utilities.Core.dll tasks/net472/Microsoft.NET.StringTools.dll tasks/net472/Microsoft.VisualStudio.Setup.Configuration.Interop.dll tasks/net472/MonoAOTCompiler.dll tasks/net472/MonoAOTCompiler.dll.config tasks/net472/System.Buffers.dll tasks/net472/System.Collections.Immutable.dll tasks/net472/System.Configuration.ConfigurationManager.dll tasks/net472/System.Memory.dll tasks/net472/System.Numerics.Vectors.dll tasks/net472/System.Reflection.Metadata.dll tasks/net472/System.Resources.Extensions.dll tasks/net472/System.Runtime.CompilerServices.Unsafe.dll tasks/net472/System.Security.AccessControl.dll tasks/net472/System.Security.Permissions.dll tasks/net472/System.Security.Principal.Windows.dll tasks/net472/System.Text.Encodings.Web.dll tasks/net472/System.Text.Json.dll tasks/net472/System.Threading.Tasks.Dataflow.dll tasks/net472/System.Threading.Tasks.Extensions.dll tasks/net472/System.ValueTuple.dll ``` Issue: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1520454 commit 5ec483c64236166f3ab24a809c75f577c808d91c Author: David Cantú <[email protected]> Date: Thu Apr 7 18:29:12 2022 -0700 S.S.C.Cose: Remove ECDsa and RSA overloads in favor of AsymmetricAlgorithm (#67661) * Remove ECDsa and RSA overloads in favor of AsymmetricAlgorithm * GenAPI changes * Assert parameter names * Keep _dummy and _dummyPrimitive https://github.com/dotnet/arcade/issues/8792#issuecomment-1090915957 commit 708171d358538cb1225fd91c6ee96e18a2177524 Author: Michal Strehovský <[email protected]> Date: Fri Apr 8 10:16:20 2022 +0900 Block implementation details on System.Object (#67574) When reflection blocking is disabled (like we do for libraries tests), still block implementation details on System.Object because tests (or anyone else for that matter) don't like to see them. Move implementation details methods on System.Object elsewhere. commit 7db963a298b5be0903279b1dcfd333371a04324c Author: Trayan Zapryanov <[email protected]> Date: Fri Apr 8 03:32:23 2022 +0300 Cache several char[] allocations in System.Private.Xml library methods (#67001) * Cache trim character array in ExtensionMethods.ToUri * cache static one more split array * Address feedback - add new lines * Remove ExtensionMethods.cs and use XmlConvert.ToUri instead. * Address feedback3 Co-authored-by: Traian Zaprianov <[email protected]> commit ade99ed7cb678abe93461906928f33d544e0debe Author: Larry Ewing <[email protected]> Date: Thu Apr 7 19:07:04 2022 -0500 Update dependencies from https://github.com/dotnet/emsdk build 20220401.2 (#67715) Microsoft.NET.Workload.Emscripten.Manifest-7.0.100 From Version 7.0.0-preview.4.22178.1 -> To Version 7.0.0-preview.4.22201.2 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> commit dd66c99ea80513cbbddc2d4c087f79a1928f29bb Author: Mike McLaughlin <[email protected]> Date: Thu Apr 7 15:42:31 2022 -0700 VS4Mac crash reports on MacOS v12 (Monterey) are missing native stack frames. (#67713) Can not properly triage VS4Mac failures. The amd64 frameless compact encoding is being used now in MacOS version 12 and needed to be implemented. Issue: https://github.com/dotnet/diagnostics/issues/2924 commit d43fff4e884d23568cbf8094eeb257d3c64ba18c Author: Drew Scoggins <[email protected]> Date: Thu Apr 7 14:36:37 2022 -0700 Increase timeout as AOT tests take longer (#67708) commit b11a22f9681863d6bf3193a7ab4c2c2041e0eeaf Author: Zoltan Varga <[email protected]> Date: Thu Apr 7 23:28:42 2022 +0200 [mono][llvm] Add support for llvm 13.x. (#67690) LLVM 13.x removed the JIT APIs the llvm jit code was using, so the JIT support is disabled when 13.x is used for now. commit 2e1935739c321b413a3f0c10720aea56f00ea8fb Author: Stephen Toub <[email protected]> Date: Thu Apr 7 16:59:05 2022 -0400 Refactor CharSetSolver and friends to avoid unbounded caching (#67673) * Refactor CharSetSolver and friends to avoid unbounded caching CharSetSolver today is a singleton and holds on to a thread-safe cache that is augmented with every BDD produced by every regex processed. Over time, then, the cache grows unbounded and represents a significant leak. This change makes CharSetSolver no longer a singleton, with every regex creating its own CharSetSolver, with caches no longer shared across instances. In doing so, we also remove the need for CharSetSolver's cache to be thread-safe, making it cheaper with a `Dictionary<>` instead of a `ConcurrentDictionary<>`. As part of this refactoring, other code has been refactored and cleaned up: - CharSetSolver was the only type deriving from the abstract BDDAlgebra. The base type has been removed and its functionality merged up into CharSetSolver. - ICharAlgebra was the only type inheriting IBooleanAlgebra. The latter has been removed and its APIs moved up into ICharAlgebra, which has also been renamed to ISolver. - Similarly, UInt64Algebra and BitVectorAlgebra have been renamed to UInt64Solver and BitVectorSolver, respectively. - Several files were renamed to match the types they contain. - Several functions were parameterized with an integer value but the same value was passed in from every call site; that value has been moved to be a const in the method and the parameter removed. - CharSetSolver had a complicated PrettyPrint method. Most of it has been deleted in favor of using the set description functionality already present in RegexCharClass. - Generic type parameter names for the implementation of sets (BDD, ulong, BitVector) were all over the map. I've standardized on TSet. - Several members of ISolver (formerly ICharAlgebra/IBooleanAlgebra) have been renamed: True is now Full, False is now Empty, and CharConstraint is now CreateFromChar. IsSatisfiable and AreEquivalent were removed in favor of adding IsEmpty and IsFull members (AreEquivalent was only ever used with Full, and IsSatisfiable calls were replaced with !IsEmpty calls). - Use of "predicate" has largely been removed. - Replaced a few recursive algorithms with loops. - Added some more comments. * Address PR feedback commit dc030a0362e3177389f4d4e73e1332c345eab891 Author: Stephen Toub <[email protected]> Date: Thu Apr 7 10:52:48 2022 -0400 Work around https://github.com/dotnet/roslyn/issues/60572 commit 23b87fb4b927f4a19e339aa03f9f154cad81cfa3 Author: Stephen Toub <[email protected]> Date: Wed Apr 6 21:20:16 2022 -0400 Work around https://github.com/dotnet/roslyn/issues/60612 commit 851fbc98b6b666f34fc33af07eed51b230ed2012 Author: Stephen Toub <[email protected]> Date: Fri Apr 1 10:43:53 2022 -0400 Manually update C# compiler version to a more recent preview commit c288acdb794b1f2edba90868a823b161d88bd2b0 Author: Andy Ayers <[email protected]> Date: Thu Apr 7 08:14:09 2022 -0700 JIT: fix OSR handling for pinned locals (#67680) The OSR method may not see any references to the pinned local, but must still report it in the GC info. So under OSR, mark (root method) pinned locals as implicitly referenced. This should address the issue seen in #67688. commit 32a6620831f28e81f91a33fd09aba3476f43c09e Author: Andy Ayers <[email protected]> Date: Thu Apr 7 08:13:47 2022 -0700 JIT: Fix OSR local detection for implicit byref promotion (#67678) In #67247 I revised how the JIT determines if a local requires special handling for OSR, but for implicit byrefs we may move locals for promoted fields back and forth between parents and this messes with the new logic. The fix is to reset the `lvIsOSRLocal` bit explicitly when creating the fields for an implicit byref promotion. Also added a bit of sanity checking to `lvaIsOSRLocal`. Fixes #67488. commit 02f0b2135c7c559b35c4086655aa4f7d47a9ca4c Author: Krzysztof Wicher <[email protected]> Date: Thu Apr 7 17:07:43 2022 +0200 Cleanup JsonTypeInfo construction (#67700) commit 7b26638a4c845e4aa91756a24b291618ca5cb1eb Author: Steve Pfister <[email protected]> Date: Thu Apr 7 10:02:15 2022 -0400 [Android] Disable System.Security.Cryptography tests on x64 and x86 Emulators (#67654) Rolling back https://github.com/dotnet/runtime/pull/67057 as the changes we made to monitor caused OOM's to happen more frequently. We were also able to reproduce locally, so we'll disable the suite until a proper fix can be made. Tracking issue: https://github.com/dotnet/runtime/issues/62547 commit e86e74ed25db60aa69ab0d67a2ce52fb85811b0c Author: Jakob Botsch Nielsen <[email protected]> Date: Thu Apr 7 15:56:38 2022 +0200 Enable MSVC standard conformance for JIT sources, try 2 (#67695) This was reverted in 794a19941a20275d47527dfa7389ae9accf754e1 as a compiler error had snuck in in the precompiled header. This fixes the problem by moving the global placement new operator into new.h instead of defining it in compiler.h where jitstd cannot (should not) access it. commit b2b2f6debe846c4ed0b97e9e40a3ec67e7b4d2f6 Author: Stephen Toub <[email protected]> Date: Thu Apr 7 09:16:10 2022 -0400 Add more StringSyntaxAttribute syntaxes (#67621) * Add DateFormat and TimeFormat to StringSyntaxAttribute * Add NumericFormat to StringSyntaxAttribute * Add TimeSpanFormat to StringSyntaxAttribute * Add EnumFormat to StringSyntaxAttribute * Add GuidFormat to StringSyntaxAttribute * Add CompositeFormat to StringSyntaxAttribute * Add Xml to StringSyntaxAttribute * Add Uri to StringSyntaxAttribute * Update ref usage to strings * Address API review renames * Fix netstandard build * Address PR feedback commit 431f8b6d6ba51c45831347f566c43d9e3a64c08a Author: Jakob Botsch Nielsen <[email protected]> Date: Thu Apr 7 14:43:18 2022 +0200 Reenable crossgen2 promotion outside version bubble (#66983) * [crossgen2] Promote single byref aot. (#65682) * Rename `CORINFO_FLG_DONT_PROMOTE` to `CORINFO_FLG_DONT_DIG_FIELDS`. * Support promotion of `struct{ 1 gcref; }` outside of version bubble. Co-authored-by: Sergey Andreenko <[email protected]> commit dbc966aa2dca791a145a08c227b06ba23886e876 Author: Egor Bogatov <[email protected]> Date: Thu Apr 7 13:50:24 2022 +0300 JIT: Fix UB in CreateConstVector (strict alignment) (#67669) commit 502268852b88b8ec7f3f57fe0c579897244d55b2 Author: Alexander Köplinger <[email protected]> Date: Thu Apr 7 12:21:35 2022 +0200 Update xharness to latest version (#67667) Needed for some perf scenarios. commit 98e01739167a3dc320b3b2fb6c31291808f19c07 Author: Krzysztof Wicher <[email protected]> Date: Thu Apr 7 12:01:08 2022 +0200 Split Reflection and SourceGen TypeInfos (#67526) * Split Reflection and SourceGen TypeInfos * Apply PR feedback * improve exception unwrapping commit cca6d24dd44ee73c6907581e25bf5e5fb42ad4c2 Author: Ilona Tomkowicz <[email protected]> Date: Thu Apr 7 10:33:10 2022 +0200 [debugger][wasm] ValueTypeClass refactoring. (#63626) * Refactoring. * Added null-indexing check. * Cleaning ValueTypeClass. * Moving public method below private fields. * Applied @radical's comments about readonly fields and method names simplification. * Rename and correct switch case error. Switch case should be based on GetValues result, not GetValueTypeClass. commit c16075477d048a42a8dac970ca3f637c48b56de6 Author: Jeremy Koritzinsky <[email protected]> Date: Wed Apr 6 21:53:41 2022 -0700 Various fixes for merged test runners on Mono (#67665) commit c61cb7192e337230c4b6f7518034f3ac65b0f1cb Author: Stephen Toub <[email protected]> Date: Wed Apr 6 22:11:06 2022 -0400 Remove _caseInsensitive field from RegexInterpreter (#67681) commit afb1c64a8dd8933d7b4aab99ab0eade72d6e2dab Author: Jeff Handley <[email protected]> Date: Wed Apr 6 16:11:30 2022 -0700 System.Runtime no longer needs to enable preview features (#67162) * System.Runtime no longer needs to enable preview features * Remove diagnostic suppression around VirtualStaticsInInterfaces * Remove remaining CA2252 suppressions for VirtualStaticsInInterfaces commit 6e3eb0de56e8d5306b756f33bd17a287cf88df68 Author: Petteri Stenius <[email protected]> Date: Thu Apr 7 02:06:38 2022 +0300 Fix System.DirectoryServices.Protocols to work on Linux (#67338) Co-authored-by: Petteri Stenius <[email protected]> commit 794a19941a20275d47527dfa7389ae9accf754e1 Author: Jakob Botsch Nielsen <[email protected]> Date: Thu Apr 7 01:04:26 2022 +0200 Revert "Enable MSVC standard conformance for JIT sources (#67608)" (#67674) This reverts commit 548bb581b632b40c8caf1aa39514590b7b183926. commit 1c1cc624cc2ca3e8324439e746735a9870583406 Author: Nikola Milosavljevic <[email protected]> Date: Wed Apr 6 15:56:24 2022 -0700 Add libssl3 dependency (#67658) commit ccda82b0b60d3d30b15767b56ebf7ae35f1ac510 Author: Jeremy Koritzinsky <[email protected]> Date: Wed Apr 6 15:47:40 2022 -0700 Pin Roslyn version for generators in .NET 7 ref pack (#67599) Co-authored-by: Jose Perez Rodriguez <[email protected]> commit b248950e52d31e9c05120aa649f082df81023d52 Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed Apr 6 17:00:24 2022 -0400 [main] Update dependencies from dotnet/linker (#67581) * Update dependencies from https://github.com/dotnet/linker build 20220404.1 Microsoft.NET.ILLink.Tasks From Version 7.0.100-1.22178.1 -> To Version 7.0.100-1.22204.1 * Update dependencies from https://github.com/dotnet/linker build 20220405.1 Microsoft.NET.ILLink.Tasks From Version 7.0.100-1.22178.1 -> To Version 7.0.100-1.22205.1 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> commit 71470821df251c43a7bd4a046cb36a11db27d06d Author: Eirik Tsarpalis <[email protected]> Date: Wed Apr 6 21:26:25 2022 +0100 Disable HandleCollectionsAsync for OSX x64 (#67662) commit c79c8e1523ebba8a4104c431a9eb09f331546a93 Author: Maryam Ariyan <[email protected]> Date: Wed Apr 6 16:01:57 2022 -0400 Allow access to child providers in ChainedConfigurationProvider (#67610) commit 548bb581b632b40c8caf1aa39514590b7b183926 Author: Jakob Botsch Nielsen <[email protected]> Date: Wed Apr 6 21:32:39 2022 +0200 Enable MSVC standard conformance for JIT sources (#67608) The JIT sources pretty much already compiled under this mode except for one thing that could just be fixed by removing the code. This will catch some obvious bugs, like passing 'false' as a pointer. commit 07cc0a3d448153649e5f9915e02e7d7b0885fbbf Author: Zoltan Varga <[email protected]> Date: Wed Apr 6 21:22:46 2022 +0200 [mono][llvm] Remove support for llvm 9.x, the 11.x support is stable … (#67277) * [mono][llvm] Remove support for llvm 9.x, the 11.x support is stable enough. * Use llvm 11.x APIs in some places. * Remove cmake support for llvm 9.x as well. commit 424a09cb81c678fb1ba1c27211b80aba2de070ad Author: AlekseyTs <[email protected]> Date: Wed Apr 6 06:54:22 2022 -0700 Proposed changes to ECMA 335 for checked user-defined operators (#66714) C# now supports defining `checked` variants of the following user-defined operators so that users can opt into or out of overflow behavior as appropriate: * The `++` and `--` unary operators [§11.7.14](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#11714-postfix-increment-and-decrement-operators) and [§11.8.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1186-prefix-increment-and-decrement-operators). * The `-` unary operator [§11.8.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1183-unary-minus-operator). * The `+`, `-`, `*`, and `/` binary operators [§11.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#119-arithmetic-operators). * Explicit conversion operators. Motivation: There is no way for a user to declare a type and support both checked and unchecked versions of an operator. This makes it hard to port various algorithms to use the proposed `generic math` interfaces exposed by the libraries team. Likewise, this makes it impossible to expose a type such as `Int128` or `UInt128` without the language simultaneously shipping its own support to avoid breaking changes. This change adds names for the new checked operators to the specification. commit 74f58586d6165e4c8c7a33fde2030024d502bf7c Author: Stephen Toub <[email protected]> Date: Wed Apr 6 09:01:14 2022 -0400 Disable RegexExperiment tests These were accidentally left enabled. commit 22870c2e31ae3c028cece52babd3cae57b560713 Author: Radek Zikmund <[email protected]> Date: Wed Apr 6 12:35:17 2022 +0200 Disable System.Net.Quic.Tests.QuicStreamTests.WriteAsync_LocalAbort_Throws (#67638) Contributes to #67612 commit cf2aef28f55aecc1432442129010024cc0b909c4 Author: Stephen Toub <[email protected]> Date: Wed Apr 6 06:27:00 2022 -0400 Change Regex UnicodeCategoryRanges to use spans (#67576) * Change Regex UnicodeCategoryRanges to use spans This avoids the overhead of allocating this data in large byte arrays. * Clean up after merge commit 3dbc67e1b844b022fd759361af4b3cd248afa05e Author: Stephen Toub <[email protected]> Date: Wed Apr 6 06:24:22 2022 -0400 Improve handling of more common Regex sets (#67365) - Today for a set like [\r\n], we'll emit a comparison that compares the char to each of '\r' and '\n', but for a set like [^\r\n], we end up falling back to emitting a lookup table. With this PR, we simply use the existing support for the non-negating case, just negating the result. - Today for a set like [\p{IsGreek}\p{IsGreekExtended}] that ends up being two ranges, we'll fall back to our lookup table. With this PR, we'll emit it as two range checks. - Today for a set like [A-Za-z], we'll fall back to our lookup table. As a special case of two-range support, with this PR we'll now recognize that these ranges are just one bit flip away from each other, and we'll employ the normal ASCII casing to do a single range comparison against the input or'd with a mask. - Today as a fallback, we employ a lookup table stored in a string; this requires a bounds check, dereferencing the string object, doing the math to find the right index, doing the math to find the right bit, etc. With this PR, for sets composed only of ranges where the exclusiveMax - inclusiveMin <= 64, with this PR we'll now emit it as a lookup into a ulong that's done in a branchless fashion and is much faster. - It appears to be relatively common for folks to use [\d\D], [\w\W], or [\s\S] as a simple way of saying "match anything"; RegexOptions.Singleline changes '.' to mean this as well. We already have special handling for '.' with Singleline as "AnyClass"... this just normalizes those other common representations into the same shape so that everyhing else recognizes them accordingly. - Today when we see an AnyClass, we emit a nonsense comparison that always results in true (or false for negations); that's because, for a while, the expression given to the matching routine may have had side effects. There are no longer side effects, though, so it's ok to just emit "true" or "false" directly and make the operation cheaper. - For every optimization we have in MatchCharacterClass, we should always be able to handle negation trivially. - Handle character classes composed of multiple UnicodeCategories. This helps with composed categories, like \p{N}. - Fix hard-coded char class strings for \W and \S. There are multiple ways to invert a RegexCharClass string: you can invert the whole string by just setting the invert flag, or you can invert all the individual components, e.g. if the string is composed of only categories, invert each category. The hardcoded string the parser uses when you write \W simply sets the negated bit, but this causes problems if \W is used as [\W], because then the individual components are added into a larger set that doesn't have negation set. And that means \W and [\W] result in different strings, which means any place we special-case the string for \W, we don't recognize [\W]. The same applies to \S. This commit changes the hardcoded string for \W and \S to use the more canonical form. Also, the implementation generally uses "set" and "class" interchangeably, but when specifying the ECMA-related strings, it uses "set" to actually mean "ranges", which is very confusing. I've changed them. commit c537cc6a45c4c75524ec98f6a8d4c9637438958e Author: Katelyn Gadd <[email protected]> Date: Wed Apr 6 02:27:12 2022 -0700 Introduce write barriers in wasm bindings, migrate to ref/out params, add gc safe regions (#65994) Introduce write barriers in key parts of the wasm bindings and migrate most code to use ref/out parameters instead of passing raw managed pointers as arguments or return values. Introduced MonoObjectRef typescript type and corresponding 'R' signature char (for 'ref/out object') Marked various old/unsafe code as deprecated Fixed some incorrect rooting in websocket APIs Introduced 'volatile' attribute on various C pointers in the bindings Added GC unsafe/safe regions in key parts of the C bindings Expanded exported APIs commit bea863ba1f3066af624454ff97aef4d86a46d4a6 Author: Adam Sitnik <[email protected]> Date: Wed Apr 6 11:07:44 2022 +0200 log entire content to see which assertion fails (#67586) * add AssertExtensions.Eqal(string, string) that logs entire content if provided strings are not equal * log entire content to see which assertion fails commit f6ca720b4276e30b1494400dd11b3e704286aba3 Author: Radek Zikmund <[email protected]> Date: Wed Apr 6 10:08:50 2022 +0200 Add CipherSuitesPolicy support for MsQuic (#67239) * Add CipherSuitesPolicy support for MsQuic * Add tests * Code review feedback * Fix test commit bb5d94d3d6d91f4b1bbadcb5ff923ac97684e61b Author: Stephen Toub <[email protected]> Date: Tue Apr 5 22:58:43 2022 -0400 Re-enable a few Regex source generator tests (#67585) commit 90908d5748b3dd3d9995e319ec5d8c612fbe9e6c Author: Jose Perez Rodriguez <[email protected]> Date: Tue Apr 5 19:25:24 2022 -0700 Changing the logic for how we deal with RegexOptions.IgnoreCase matching. (#67184) * Changing the logic for how we deal with RegexOptions.IgnoreCase matching. * Addressing first round of feedback * Addressing more feedback. * - Ensure that Backreferences use the same case behavior that the casing table does when using IgnoreCase. - Addressing more feedback. * Apply suggestions from code review Co-authored-by: Stephen Toub <[email protected]> * Address more feedback * Fix allocation regression for patterns with a lot of ascii letters * Skip few tests in Browser and .NET Framework * Skip one more test that shouldn't be ran on wasm * Address more PR Feedback * More feedback * Skip tests that are failing in NLS-globalization queues Co-authored-by: Stephen Toub <[email protected]> commit b4c76da8e8bddce2ffdf0d96574188b9ec20d151 Author: Andrii Kurdiumov <[email protected]> Date: Wed Apr 6 06:51:22 2022 +0600 Use ComSmartPtr in tests (#67584) * Use ComSmartPtr in tests See https://github.com/dotnet/winforms/pull/6743#discussion_r837019661 for discussion Co-authored-by: Aaron Robinson <[email protected]> commit 2e998c2712e5e09af2ad7258441a884170b25982 Author: Steve Pfister <[email protected]> Date: Tue Apr 5 18:50:29 2022 -0400 [iOS] Disable OptionsMonitorTest.TestCurrentValueDoesNotAllocateOnceValueIsCached (#67613) Created a tracking issue so that it can be fixed at a later date and not block the extra-platforms rolling build. https://github.com/dotnet/runtime/issues/67611 commit 0c5e7daf58e5d79cb7a2a8767d1f0e6ec4de4dd4 Author: Aleksey Kliger (λgeek) <[email protected]> Date: Tue Apr 5 16:45:16 2022 -0400 [tests] Re-enable generic math Create tests on iOS (#67542) Fixes https://github.com/dotnet/runtime/issues/61920 Fixed by https://github.com/dotnet/runtime/pull/66739 commit 009d9cfedd8ebf5649e59633062229c6c5d6f1d0 Author: Jeremy Koritzinsky <[email protected]> Date: Tue Apr 5 12:50:43 2022 -0700 Move tests that touch the network to outerloop only for infra-stability reasons (#67593) * Move tests that touch the network to outerloop only for infra-stability reasons * PR feedback commit 9b315dc916226770932d7d4b09fa9fd5c673fb6e Author: Koundinya Veluri <[email protected]> Date: Tue Apr 5 12:41:30 2022 -0700 Disable deleting call counting stubs (#67563) It's currently incompatible with the W^X changes, and there's another rare issue that may cause a crash when checking if a precode target is a jump stub. Memory impact on x64: Calling and tiering up ~10 K empty methods causes the following amount of memory to remain. Methods with stubs: 10139 Memory usage: ~876 KB Memory usage per method with stub: ~88.5 B Committed memory at the end after GC: ~9.5 MB On a larger test case that compiles Roslyn sources 16 times in the same process, the numbers are similar. Methods with stubs: 22141 Memory usage: ~1913 KB Memory usage per method with stub: ~88.5 B Committed memory at the end after GC: 90-95 MB It should be possible to reduce the leaked memory per method with stub from ~88.5 B to about 10-16 B depending on architecture in the future if necessary. - Fixes https://github.com/dotnet/runtime/issues/66924 - Fixes https://github.com/dotnet/runtime/issues/66424 commit 605ce9c70d9bcf3edbfdcba280aaa4073276a67d Author: Andy Gocke <[email protected]> Date: Tue Apr 5 12:06:34 2022 -0700 Revert "Publish crossgen as AOT if supported by the target platform (#65948)" (#67590) This reverts commit 0d1e04ba2a9ebc9d21a7f65db00407dd0056b547. commit 16b2cf5baa8c14650261f957d7ea31d4ae723561 Author: Elinor Fung <[email protected]> Date: Tue Apr 5 11:26:09 2022 -0700 Update error message for runtime not found (#67564) commit 749e609615e5ef2697f16e3e48809ae02de7ad19 Author: Jakob Botsch Nielsen <[email protected]> Date: Tue Apr 5 19:05:35 2022 +0200 Fix too wide constant stores to parameters on macOS (#67336) Fix #67331 commit 07d8b82d54b6b8db16f5fbb531efcb1e276dc264 Author: Radek Zikmund <[email protected]> Date: Tue Apr 5 15:54:35 2022 +0200 [QUIC] Call SendResettableCompletionSource.CompleteException in AbortWrite (#67341) * Call SendResettableCompletionSource.CompleteException in AbortWrite * Add test * fixup! Add test * Use loop to make the test more robust commit 34f2b587f3512d3974d73b316e565194df34eea3 Author: Aleksey Kliger (λgeek) <[email protected]> Date: Mon Apr 4 22:02:34 2022 -0400 Don't pass --minimize to Xcode 13.3 dsymutil (#67543) * Don't pass --minimize to Xcode 13.3 dsymutil Fixes https://github.com/dotnet/runtime/issues/66770 New xcode command line tools dropped support for the `--minimize` option (which is now the default). The related LLVM change is https://github.com/llvm/llvm-project/commit/5d07dc897707f877c45cab6c7e4b65dad7d3ff6d * fix build with older Xcodes use a list of options, not a single option with a space in it Co-authored-by: Kevin Jones <[email protected]> commit 4fed599fe7b7ebea8886d3c987c45e7520ba0fa3 Author: Bruce Forstall <[email protected]> Date: Mon Apr 4 17:43:03 2022 -0700 Don't force `TieredCompilation=0` for SuperPMI replay job (#67489) Use whatever flags already are baked into the SuperPMI collection. commit 161bdef74be8edde951f02524e20df6283474db6 Author: Ankit Jain <[email protected]> Date: Mon Apr 4 20:19:35 2022 -0400 Disable `Microsoft.Extensions.Hosting.WindowsServices.Tests` for (#67550) * Disable `Microsoft.Extensions.Hosting.WindowsServices.Tests` for .. non-windows platforms. * UseWindowsServiceTests: Mark the test as windows only * Fix build commit d01cabec3c26afe9c44ebc865c7ee0112a7da852 Author: Tanner Gooding <[email protected]> Date: Mon Apr 4 15:40:36 2022 -0700 Updating the generic math interfaces according to the last API review (#67453) * Create INumberBase and allow Complex to implement it * Move DivRem to only be available for IBinaryInteger * Split apart various floating-point interfaces for better extensibility * Annotate the generic math interfaces to implement on BigInteger and Complex * Moving various generic math interfaces into the System.Numerics namespace * Split various generic math interfaces into their own file for easier discoverability * IParseable -> IParsable * Update ISignedNumber and IUnsignedNumber to be "marker" interfaces * PI -> Pi and IEEERemainder -> Ieee754Remainder * Removing the various TInteger constraints in favor of using int where feasible * Moving IDivisionOperators and ISpanFormattable down to INumberBase * Moving CopySign, IsNegative, MaxMagnitude, and MinMagnitude down to INumber * Create<TOther> -> CreateChecked<TOther> * Updating various generic math tests * Update src/libraries/System.Private.CoreLib/src/System/Numerics/INumber.cs Co-authored-by: Theodore Tsirpanis <[email protected]> * Fixing the reference assembly for System.Numerics.Complex * Removing generic math support from System.Numerics.Complex until the trimming issue can be resolved Co-authored-by: Theodore Tsirpanis <[email protected]> commit 580d5568bf58b6831b34e2fd7191f97841f9305c Author: Aaron Robinson <[email protected]> Date: Mon Apr 4 13:50:23 2022 -0700 Disable some interop tests on Win-ARM32 (#67553) commit 4f602117b7f5832f691056325141a063072de019 Author: Ankit Jain <[email protected]> Date: Mon Apr 4 16:14:13 2022 -0400 [wasm][debugger] Some test fixes (#67373) * [wasm] Bump timeout for debugger tests to 30mins, to accomodate EvaluateOnCallFrameTests * [wasm][debugger] statically init App.static_method_table `debugger-driver.html` has a `App.init` function (called from `onDotnetReady`) that init's `App.static_method_table`. But this function can race with a test, which might call `invoke_static_method`, and that would fail because `App.static_method_table` is not defined yet. * Improve logging slightly to help debug random failures * Update line numbers in tests commit 6ffb7f0504c8be8e54ba5ad55a04c4635ec49275 Author: Ankit Jain <[email protected]> Date: Mon Apr 4 15:44:41 2022 -0400 Revert "[main] Update dependencies from dotnet/linker (#67381)" (#67539) This reverts commit a0f7927c0ce4cfa8d1c832e70461b0145389a8be. It broke wasm builds: https://github.com/dotnet/runtime/pull/67381 commit e3ecc8372630f22011815d64099598e30bcb43a7 Author: devsko <[email protected]> Date: Mon Apr 4 20:28:28 2022 +0200 Concatenate multiple cookies with semicolon (#67455) * Concatenate cookies with semicolon * Restore tests that run on .NET Framework * Change Cookie header to Custom * PR feedback commit f46f4c9ed454e13afc650dd61db91c48921a0caa Author: Michal Strehovský <[email protected]> Date: Tue Apr 5 01:41:37 2022 +0900 Make handling of invalid code more robust (#67524) * Call `EnsureLoadableMethod` from scanner, same as we do in JitInterface. * Make scan/compile diffing less sensitive to differences caused by invalid IL. commit f035591a173a528e938a682d93703a807e7016bd Author: Michal Strehovský <[email protected]> Date: Tue Apr 5 01:30:33 2022 +0900 Fix handling of makeref/refvalue in generic code (#67523) * Fix handling of makeref/refvalue in generic code Found in Pri0 tests. We didn't have any coverage for TypedReference in smoke tests. * Update Generics.cs commit fe4ae7d7fb4e6e17a8f491697c7e7eaf8780a5d2 Author: Viktor Hofer <[email protected]> Date: Mon Apr 4 17:25:52 2022 +0200 Fix parent test folder name (#67528) commit 6f30425664e452170a67072fff5462caf556c796 Author: Marcelo M. Maciel <[email protected]> Date: Mon Apr 4 09:44:14 2022 -0300 Updated branch name, from master to main. (#67522) commit d9b8a0904187c533990cba681bb5defb57382a02 Author: madelson <[email protected]> Date: Mon Apr 4 07:59:23 2022 -0400 Avoid pre-allocating large arrays in some scenarios for Enumerable.Chunk (#67210) * Avoid pre-allocating large arrays in some scenarios for Enumerable.Chunk(). Fix #67132 * Switch Chunk() to use List-based implementation. See discussion here: https://github.com/dotnet/runtime/pull/67210#discussion_r836561697 * Address feedback from https://github.com/dotnet/runtime/pull/67210/files commit c830e33c1aa0526ceefead48e39c3d483e7732c9 Author: Egor Bogatov <[email protected]> Date: Mon Apr 4 12:46:30 2022 +0300 JIT: Optimize unused array allocations (#67205) Co-authored-by: Jan Kotas <[email protected]> Co-authored-by: Jakob Botsch Nielsen <[email protected]> commit 7281406fe89936e3bedd5e3a1c742f421f21a9f3 Author: …
There is a nice perf improvement that most likely was caused by this change: |
I'm curious, how is the perf improvement mapped to the change? I am a little surprised this change would make a difference here but if it did that is a nice bonus : ) |
@noahfalk each point on the chart provided by the Reporting System represents a dotnet/runtime commit. We can select two of them and get the diff (this magic needs to get documented). For this improvement the diff points to the following range of commits: 322ea09...dee2bb5 |
I'm not sure, I didn't expect it would have any effect in steady state. Some GC memory usage would have been reduced, maybe there's a secondary effect. |
In addition to our unexpected perf gains, big thanks to getting this sorted out @kouvel. I know it had been lurking there a long time and took a good bit of effort to rework : ) |
GCHeapHash
:GCHeapHash
usage withSHash
s_supports_autoremove
toSHash
to simulateGCHeapHash
's ability to remove elements while iterating them. When enabled,SHash
callsShouldDelete()
on elements it walks during various operations and removes them if requestedSHash
to ease cleanup of heap-allocated elementsCrossLoaderAllocatorHash
:Miscellaneous:
Testing:
Fix for #58471 and #66759 in main