-
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
Changing the logic for how we deal with RegexOptions.IgnoreCase matching. #67184
Conversation
Tagging subscribers to this area: @dotnet/area-system-text-regularexpressions Issue DetailsFixes #61048 Overhauling how we handle RegexOptions.IgnoreCase. In the past, when this option was used, we would call ToLower() on the pattern when creating the Regex type, and then we would call ToLower() on the input. This was not efficient, and had other issues (mentioned in #61048 so won't list all here) so for .NET 5 @stephentoub special cased ranges A-Z and a-z so that instead of calling ToLower() on both sides, the pattern would be transformed at creation time and swap single letters (or ranges) for sets that includded equivalent values. This PR basically takes that same idea, but expands it to apply through all Unicode, to the point where the only place where we expect to be using ToLower() at match time will only happen when you have a Backreference in the pattern.
|
/azp run runtime-libraries-coreclr outerloop |
Azure Pipelines successfully started running 1 pipeline(s). |
src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/src/System.Text.RegularExpressions.csproj
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexNode.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexNode.cs
Outdated
Show resolved
Hide resolved
...ies/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexPrefixAnalyzer.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/RegexCultureTests.cs
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/RegexIgnoreCaseTests.cs
Outdated
Show resolved
Hide resolved
...ibraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCharClass.cs
Outdated
Show resolved
Hide resolved
src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs
Show resolved
Hide resolved
Thanks for working on this. Did a quick pass through and left some comments. I'll look in more depth later. |
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
can we generate these with form like In reply to: 1080970694 In reply to: 1080970694 Refers to: src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.Data.cs:14 in 1db3044. [](commit_id = 1db3044, deletion_comment = False) |
...ibraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCharClass.cs
Show resolved
Hide resolved
...aries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseBehavior.cs
Outdated
Show resolved
Hide resolved
|
||
public static IEnumerable<(string, char, char)> GetCaseEquivalencesPerCulture() | ||
{ | ||
foreach (string cultureName in new[] { "", "en-US", "tr-TR" }) |
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 .NET adds support for another culture that requires a "special case", will any test fail? I mean: in principle, we could get this test to enumerate over all supported cultures, and it would then fail if a new one was added that needed attention. But I'm guessing that's way too slow.
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 we would need to enumerate all cultures in order to detect such cases and break accordingly. FWIW, In order to come up with the different behaviors we support with this PR I did run all permutations across all enumerated cultures, and found that there are only three distinct behaviors amongst the 870 that .NET supports, and all of those only differ on how they handle characters: 'i', 'I', '\u0130', '\u0131'. Other than that, all cultures behave exactly the same when used like: culture.TextInfo.ToLower(c)
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.
Yep, I'm sure of that - I know Steve did the same test - just thinking of the hypothetical future where we add another. not sure it's worth "protecting against" though. In some binging, I couldn't find mention of anything but tr and az.
src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/RegexCultureTests.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
...s/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
Outdated
Show resolved
Hide resolved
@joperezr will this also close #36147?
I guess case folding would be a 4th possible approach - which could be considered in future - unless that's the same thing as "linguistic comparison". @mkArtakMSFT when preparing a response to a web request, does the server generally set CurrentCulture to the culture of the client? We are preparing a change that could potentially modify the behavior of regex objects when they are constructed with CurrentCulture X and consumed in CurrentCulture Y. The current behavior is stable but quite incoherent (it depends on things like the exact pattern, see #36147), and this would make it much more coherent (as well as faster). I think we have to make this change but I'm curious how common it is to create and use regexes in this way. |
Yes, it will fix that since now when using a pattern like Regarding your other comment, I think it is relevant to call out that among the 3 different behaviors we have across all cultures, in reality the only characters that may have a different behavior due to the culture are |
OK I added that # to the top post so it closes it. Yup unless and until we do some kind of linguistic/case folding I realize it only affects tr/az and Kelvin. I think the change is good - just wondering who might be affected. I assume our guidance would be - construct for the same culture. Or, have two regex, one for tr/az and one for all others. Or, use the static members, and rely on the internal cache to reuse things. |
src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/RegexIgnoreCaseTests.cs
Show resolved
Hide resolved
7134ee6
to
eab740f
Compare
commit 7bfc61b970e28f94782ef7c0cbcbbbc94ef9f5eb Author: Juan Hoyos <juan.hoyos@microsoft.com> 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 <danmose@microsoft.com> 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 <48834899+theodorzoulias@users.noreply.github.com> 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 <viktor.hofer@microsoft.com> Date: Mon Apr 11 00:48:47 2022 +0200 Delete dead code (#67648) commit 4e61fb11116393b9babdb029412eb37274cddf73 Author: Jan Kotas <jkotas@microsoft.com> 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 <Kunal.Pathak@microsoft.com> 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 <danmose@microsoft.com> Date: Sun Apr 10 09:29:43 2022 -0600 Remove dead strings from .rc files (#67817) commit 72dc5c5dc48089a0a2bd1c094483a4c743461cd5 Author: Jan Kotas <jkotas@microsoft.com> Date: Sat Apr 9 21:58:35 2022 -0700 Delete some Win9x-specific code and comments (#67814) commit 93c7c896c70737fb7b81480d11bba108fb0f7660 Author: creator1creeper1 <88212773+creator1creeper1@users.noreply.github.com> 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 <alex.koeplinger@outlook.com> 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 <vsadov@microsoft.com> 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 <lakshanf@microsoft.com> 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 <jeffhandley@users.noreply.github.com> Date: Sat Apr 9 09:19:51 2022 -0700 FabricBot config: Viktor is back (#67787) commit 0c64bdf3afc1fdc9166ad6c22c1990d3e0a6c509 Author: Tomáš Rylek <trylek@microsoft.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <3840695+am11@users.noreply.github.com> 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 <stoub@microsoft.com> 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 <egorbo@gmail.com> Date: Sat Apr 9 12:54:15 2022 +0300 Vectorize IndexOf for OrdinalIgnoreCase (#67758) Co-authored-by: Stephen Toub <stoub@microsoft.com> commit 072d87b8c95cc7427a7a242c85d6b17950c7a074 Author: Jose Perez Rodriguez <joperezr@microsoft.com> 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 <stoub@microsoft.com> 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) <aleksey@lambdageek.org> 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 <52458914+fanyang-mono@users.noreply.github.com> 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 <brucefo@microsoft.com> 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 <radical@gmail.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <brucefo@microsoft.com> Date: Fri Apr 8 17:33:27 2022 -0700 Fix a JIT formatting issue (#67785) commit 27fbbda5685ac01d48d33c5f2915b8ca65163e97 Author: Vitek Karas <10670590+vitek-karas@users.noreply.github.com> 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 <elfung@microsoft.com> commit ff6abfea0bb9b71eb3215157749047dd120a4d9f Author: Mike McLaughlin <mikem@microsoft.com> 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 <steveharter@users.noreply.github.com> 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 <lewing@microsoft.com> 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 <radical@gmail.com> commit aff3c1867b50d8a021c0a7b1df94f54a40cb44a5 Author: Juan Hoyos <juan.hoyos@microsoft.com> Date: Fri Apr 8 12:02:49 2022 -0700 Fix cross dac packaging (#67710) commit 19475c2dc8a86e04525ce8781d819b1cfd4c0c2a Author: Badre BSAILA <54767641+pedrobsaila@users.noreply.github.com> Date: Fri Apr 8 20:44:11 2022 +0200 display tidy message for failed assertions (#67750) commit cef4ae17d91c278880f45f017e4272afe1f379b3 Author: Maryam Ariyan <maryam.ariyan@microsoft.com> Date: Fri Apr 8 14:16:17 2022 -0400 Add metrics for caching (#66479) commit 51afa067be9f0d00dac2c455ceb78e38eef1e239 Author: Qiao Pengcheng <qiaopengcheng@loongson.cn> 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 <qiaopengcheng-hf@loongson.cn> commit f89fbb96cabe95db5869e3d44c6b48c1c0f8fc1a Author: Drew Scoggins <anscoggi@microsoft.com> Date: Fri Apr 8 09:51:23 2022 -0700 Add NoWASM to category filter (#67721) commit c9e0a3b2e8cb66349820ad3ede4dc35de7d74359 Author: Bruce Forstall <brucefo@microsoft.com> 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 <kwicher@microsoft.com> Date: Fri Apr 8 17:35:18 2022 +0200 Further JsonPropertyInfo caching cleanup (#67754) commit eb223d8514fb0b3166cc0824d492ca3c0a5736ed Author: Stephen Toub <stoub@microsoft.com> 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 <32671551+rzikm@users.noreply.github.com> 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 <kouvel@users.noreply.github.com> 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 <stoub@microsoft.com> Date: Fri Apr 8 06:19:59 2022 -0400 Disable ClientAndServer_OneOrBothUseDefault_Ok test (#67737) commit 8e8a62156ea459945b1d953c4fbe950d276bbc9b Author: Tom Deseyn <tom.deseyn@gmail.com> 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 <lrt80@abv.bg> 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 <Traian.Zaprianov@docuware.com> commit 9cb6475516b94aff3d35c67eab579ceb351899b9 Author: Vlad Brezae <brezaevlad@gmail.com> 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 <tagoo@outlook.com> 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 <Maoni0@users.noreply.github.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <brucefo@microsoft.com> Date: Thu Apr 7 22:23:17 2022 -0700 Temporarily disable assert to avoid #67600 (#67711) commit 244aa7ae7c3ea29821c3a500933d78161c5f470a Author: Ankit Jain <radical@gmail.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <maximkoshevoi61@gmail.com> 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 <eric.erhardt@microsoft.com> * Update src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerProcessor.cs Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> * Remove `#nullable enable` Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> commit 3b7303af3a917cd9c78cd7194efdb1baf90ea4d9 Author: Ankit Jain <radical@gmail.com> 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ú <dacantu@microsoft.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <lrt80@abv.bg> 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 <Traian.Zaprianov@docuware.com> commit ade99ed7cb678abe93461906928f33d544e0debe Author: Larry Ewing <lewing@microsoft.com> 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 <mikem@microsoft.com> 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 <anscoggi@microsoft.com> Date: Thu Apr 7 14:36:37 2022 -0700 Increase timeout as AOT tests take longer (#67708) commit b11a22f9681863d6bf3193a7ab4c2c2041e0eeaf Author: Zoltan Varga <vargaz@gmail.com> 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 <stoub@microsoft.com> 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 <stoub@microsoft.com> Date: Thu Apr 7 10:52:48 2022 -0400 Work around https://github.com/dotnet/roslyn/issues/60572 commit 23b87fb4b927f4a19e339aa03f9f154cad81cfa3 Author: Stephen Toub <stoub@microsoft.com> Date: Wed Apr 6 21:20:16 2022 -0400 Work around https://github.com/dotnet/roslyn/issues/60612 commit 851fbc98b6b666f34fc33af07eed51b230ed2012 Author: Stephen Toub <stoub@microsoft.com> Date: Fri Apr 1 10:43:53 2022 -0400 Manually update C# compiler version to a more recent preview commit c288acdb794b1f2edba90868a823b161d88bd2b0 Author: Andy Ayers <andya@microsoft.com> 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 <andya@microsoft.com> 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 <kwicher@microsoft.com> Date: Thu Apr 7 17:07:43 2022 +0200 Cleanup JsonTypeInfo construction (#67700) commit 7b26638a4c845e4aa91756a24b291618ca5cb1eb Author: Steve Pfister <steveisok@users.noreply.github.com> 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 <Jakob.botsch.nielsen@gmail.com> 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 <stoub@microsoft.com> 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 <Jakob.botsch.nielsen@gmail.com> 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 <andreenkosa@gmail.com> commit dbc966aa2dca791a145a08c227b06ba23886e876 Author: Egor Bogatov <egorbo@gmail.com> Date: Thu Apr 7 13:50:24 2022 +0300 JIT: Fix UB in CreateConstVector (strict alignment) (#67669) commit 502268852b88b8ec7f3f57fe0c579897244d55b2 Author: Alexander Köplinger <alex.koeplinger@outlook.com> 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 <kwicher@microsoft.com> 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 <32700855+ilonatommy@users.noreply.github.com> 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 <jekoritz@microsoft.com> Date: Wed Apr 6 21:53:41 2022 -0700 Various fixes for merged test runners on Mono (#67665) commit c61cb7192e337230c4b6f7518034f3ac65b0f1cb Author: Stephen Toub <stoub@microsoft.com> Date: Wed Apr 6 22:11:06 2022 -0400 Remove _caseInsensitive field from RegexInterpreter (#67681) commit afb1c64a8dd8933d7b4aab99ab0eade72d6e2dab Author: Jeff Handley <jeffhandley@users.noreply.github.com> 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 <petteri.stenius@ubisecure.com> Date: Thu Apr 7 02:06:38 2022 +0300 Fix System.DirectoryServices.Protocols to work on Linux (#67338) Co-authored-by: Petteri Stenius <petteri.stenius@gmail.com> commit 794a19941a20275d47527dfa7389ae9accf754e1 Author: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com> 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 <nikolam@microsoft.com> Date: Wed Apr 6 15:56:24 2022 -0700 Add libssl3 dependency (#67658) commit ccda82b0b60d3d30b15767b56ebf7ae35f1ac510 Author: Jeremy Koritzinsky <jekoritz@microsoft.com> 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 <joperezr@microsoft.com> 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 <eirik.tsarpalis@gmail.com> Date: Wed Apr 6 21:26:25 2022 +0100 Disable HandleCollectionsAsync for OSX x64 (#67662) commit c79c8e1523ebba8a4104c431a9eb09f331546a93 Author: Maryam Ariyan <maryam.ariyan@microsoft.com> Date: Wed Apr 6 16:01:57 2022 -0400 Allow access to child providers in ChainedConfigurationProvider (#67610) commit 548bb581b632b40c8caf1aa39514590b7b183926 Author: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com> 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 <vargaz@gmail.com> 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 <AlekseyTs@users.noreply.github.com> 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 <stoub@microsoft.com> Date: Wed Apr 6 09:01:14 2022 -0400 Disable RegexExperiment tests These were accidentally left enabled. commit 22870c2e31ae3c028cece52babd3cae57b560713 Author: Radek Zikmund <32671551+rzikm@users.noreply.github.com> 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 <stoub@microsoft.com> 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 <stoub@microsoft.com> 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 <kg@luminance.org> 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 <adam.sitnik@gmail.com> 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 <32671551+rzikm@users.noreply.github.com> 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 <stoub@microsoft.com> Date: Tue Apr 5 22:58:43 2022 -0400 Re-enable a few Regex source generator tests (#67585) commit 90908d5748b3dd3d9995e319ec5d8c612fbe9e6c Author: Jose Perez Rodriguez <joperezr@microsoft.com> 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 <stoub@microsoft.com> * 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 <stoub@microsoft.com> commit b4c76da8e8bddce2ffdf0d96574188b9ec20d151 Author: Andrii Kurdiumov <kant2002@gmail.com> 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 <arobins@microsoft.com> commit 2e998c2712e5e09af2ad7258441a884170b25982 Author: Steve Pfister <steveisok@users.noreply.github.com> 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) <aleksey@lambdageek.org> 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 <jekoritz@microsoft.com> 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 <kouvel@users.noreply.github.com> 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 <angocke@microsoft.com> 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 <elfung@microsoft.com> Date: Tue Apr 5 11:26:09 2022 -0700 Update error message for runtime not found (#67564) commit 749e609615e5ef2697f16e3e48809ae02de7ad19 Author: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com> 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 <32671551+rzikm@users.noreply.github.com> 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) <alklig@microsoft.com> 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 <vcsjones@github.com> commit 4fed599fe7b7ebea8886d3c987c45e7520ba0fa3 Author: Bruce Forstall <brucefo@microsoft.com> 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 <radical@gmail.com> 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 <tagoo@outlook.com> 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 <teo@tsirpanis.gr> * 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 <teo@tsirpanis.gr> commit 580d5568bf58b6831b34e2fd7191f97841f9305c Author: Aaron Robinson <arobins@microsoft.com> Date: Mon Apr 4 13:50:23 2022 -0700 Disable some interop tests on Win-ARM32 (#67553) commit 4f602117b7f5832f691056325141a063072de019 Author: Ankit Jain <radical@gmail.com> 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 <radical@gmail.com> 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 <devsko@users.noreply.github.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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ý <MichalStrehovsky@users.noreply.github.com> 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 <viktor.hofer@microsoft.com> Date: Mon Apr 4 17:25:52 2022 +0200 Fix parent test folder name (#67528) commit 6f30425664e452170a67072fff5462caf556c796 Author: Marcelo M. Maciel <4993482+marcelo-maciel@users.noreply.github.com> Date: Mon Apr 4 09:44:14 2022 -0300 Updated branch name, from master to main. (#67522) commit d9b8a0904187c533990cba681bb5defb57382a02 Author: madelson <1269046+madelson@users.noreply.github.com> 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 <egorbo@gmail.com> Date: Mon Apr 4 12:46:30 2022 +0300 JIT: Optimize unused array allocations (#67205) Co-authored-by: Jan Kotas <jkotas@microsoft.com> Co-authored-by: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com> commit 7281406fe89936e3bedd5e3a1c742f421f21a9f3 Author: …
Perf improvements on all configs: System.Text.RegularExpressions.Tests.Perf_Regex_Common.OneNodeBacktracking(Options: IgnoreCase, Compiled)
|
Fixes #61048
Fixes #61972
Fixes #61786
Fixes #36147
Fixes #36149
Fixes #63395
Overhauling how we handle RegexOptions.IgnoreCase. In the past, when this option was used, we would call ToLower() on the pattern when creating the Regex type, and then we would call ToLower() on the input. This was not efficient, and had other issues (mentioned in #61048 so won't list all here) so for .NET 5 @stephentoub special cased ranges A-Z and a-z so that instead of calling ToLower() on both sides, the pattern would be transformed at creation time and swap single letters (or ranges) for sets that includded equivalent values. This PR basically takes that same idea, but expands it to apply through all Unicode, to the point where the only place where we expect to be using ToLower() at match time will only happen when you have a Backreference in the pattern.
cc: @tarekgh @stephentoub