Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System.Linq.Expressions.Tests.CompilerTests.CompileDeepTree_NoStackOverflowFast overflows stack with Checked CoreCLR build #20788

Closed
RussKeldorph opened this issue Mar 27, 2017 · 19 comments

Comments

@RussKeldorph
Copy link
Contributor

CompilerTests.CompileDeepTree_NoStackOverflowFast overflows the stack with Checked (and presumably Debug) builds of CoreCLR. See comment.

This makes it problematic for us to use CoreFx tests to validate CoreCLR. Is it reasonable to reduce the complexity of the test so that it fits on the stack regardless of runtime build type? If not, can you recommend an attribute to tag this test so we can disable it in CoreCLR runs?

Repro
(Windows, from dotnet/coreclr repo!)

build x64 checked skiptests
python tests\scripts\run-corefx-tests.py -build_type Checked

(There are likely simpler repro steps that can be distilled from the operation of run-corefx-tests.py, but those are left as an exercise for the reader.)

@RussKeldorph
Copy link
Contributor Author

@JonHanna since you last modified this test.

@JonHanna
Copy link
Contributor

The purpose of that test is to test some functionality that pre-empts overflow by probing with TryEnsureSufficientExecutionStack and pushing further work onto another thread if necessary. The small stack of the test lets it reach that "if necessary" point quickly.

It failing rather suggests the test is doing its job, and the functionality it is not working in this case.
What do you mean by "checked" coreclr?

@RussKeldorph
Copy link
Contributor Author

RussKeldorph commented Mar 27, 2017

@JonHanna The Checked build is similar to a Debug build (assertions enabled, etc.) with C++ and C# compiler optimizations enabled. It is the most useful build mode for testing the CLR JIT, since it's faster (C++ optimizations), it's testing JIT optimizations (C# optimizations), and assertions are enabled to validate the internal state of the runtime and JIT. I will edit my comment above with repro steps if you would like to try it.

We assumed the test didn't have stack probing functionality and that the additional stack requirements of a Checked build were simply causing the overflow. If probing is enabled, perhaps the issue is more subtle.

@AndyAyersMS @dotnet/jit-contrib

@JonHanna
Copy link
Contributor

It's the functionality itself that has stack-probing, but if that's not going to work then the test has done its job in alerting us to that. Expressions can get itself into some very deep recursion in cases that are relatively rare but common enough that they've caused users problem, and the probing allowed that to be resolved. If that test overflows the stack, then likely so would that real-world code that was considered fixed.

@JonHanna
Copy link
Contributor

cc: @bartdesmet who wrote the first version of the stack-probing code.

@stephentoub
Copy link
Member

TryEnsureSufficientExecutionStack has some hardcoded limits in it "to allow a typical non-recursive call chain to execute":
https://github.com/dotnet/coreclr/blob/2ca9cec2d982162ab4f43d1136d0c67de57387cc/src/vm/threads.cpp#L6832-L6840
I assume those limits are based on release builds. If debug/checked builds influence the size of stack frames significantly, then potentially these values in coreclr need to be increased for debug/checked builds.

@JonHanna
Copy link
Contributor

Are the outerloop tests being run here? There's a slower outerloop test that hits the same functionality with a normal stack size. If that passes then I think it would be reasonable to just disable the faster test in this context, if there was a good way of signalling that it should be skipped.

@RussKeldorph
Copy link
Contributor Author

Outerloop tests aren't being run currently, though they are planned once innerloop are green. This is (until something else breaks) the last failure in the innerloop tests with Checked coreclr. I can kick off outerloop now and see how they look.

@JonHanna
Copy link
Contributor

It'd be worth knowing if this test's outerloop sibling breaks or not, I think.

@RussKeldorph
Copy link
Contributor Author

I kicked off an -Outerloop test run and another run with a CoreCLR with higher _DEBUG min stack size by changing the lines pointed out by @stephentoub. Will report back.

@AndyAyersMS
Copy link
Member

In this particular test the SO hits during classloading when the runtime is trying to cons up a descriptive string for the class being loaded. This string consing is a diagnostic aid that only happens in debug/check runtimes.

I like @stephentoub's suggestion since this behavior is coupled to how the runtime is built, we could easily just increase the min stack size for debug/check builds (not sure just how much is needed though). On the other hand I dislike tests whose behavior varies depending on how the runtime is built....

@RussKeldorph
Copy link
Contributor Author

Update: The Outerloop version (CompilerTests.CompileDeepTree_NoStackOverflow) passes, and increasing the constants @stephentoub pointed out has no effect.

If I understand the code correctly, the constants are not limiting the min stack size but are instead controlling a mechanism where code can query to ensure "at least 128k (or 64k for 32-bit) bytes of stack remain." The test is only providing 64k of stack total, so this TryEnsureSufficientExecutionStack thing is largely irrelevant since it can never return true for this test.

It looks like Checked CoreCLR is simply blowing 64k of stack. The three biggest frames on the stack are about 4k each, which is bad but not outrageous. It could be that CoreCLR is simply too big for a 64k stack. I suppose CoreCLR could elsewhere enforce a minimum stack size parameter on thread creation, but I could also believe we want to leave people to get what they deserve, in which case we need to either disable or modify this test case to accomodate non-Release builds of the runtime. I agree with @AndyAyersMS that we shouldn't make the test somehow detect the flavor of the runtime. Either the runtime should accommodate or we should simply make this test leg not run it.

Stack trace FYI (sorry, how do I combine details tag with fenced code?)

 #   Memory  Child-SP          RetAddr           Call Site
00           0000001e`c37e3fb0 00007ffd`31105118 coreclr!BaseContract::DoChecks+0x2b [c:\git\corecl2\src\inc\contract.inl @ 53]
01        70 0000001e`c37e4020 00007ffd`311096cc coreclr!SString::ConvertToFixed+0xf4 [c:\git\corecl2\src\inc\sstring.inl @ 1914]
02        f0 0000001e`c37e4110 00007ffd`31114fcd coreclr!SString::GetCount+0x2c0 [c:\git\corecl2\src\inc\sstring.inl @ 1224]
03       130 0000001e`c37e4240 00007ffd`311275dd coreclr!SString::End+0x2c9 [c:\git\corecl2\src\inc\sstring.inl @ 2031]
04       140 0000001e`c37e4380 00007ffd`311366e4 coreclr!SString::CheckIteratorRange+0xd1 [c:\git\corecl2\src\inc\sstring.inl @ 1567]
05        c0 0000001e`c37e4440 00007ffd`3111558e coreclr!SString::Replace+0x4bc [c:\git\corecl2\src\utilcode\sstring.cpp @ 1053]
06       430 0000001e`c37e4870 00007ffd`31112bfb coreclr!SString::Insert+0x55a [c:\git\corecl2\src\inc\sstring.inl @ 1076]
07       170 0000001e`c37e49e0 00007ffd`31113071 coreclr!SString::Append+0x417 [c:\git\corecl2\src\inc\sstring.inl @ 712]
08       170 0000001e`c37e4b50 00007ffd`317c8701 coreclr!SString::Append+0x41d [c:\git\corecl2\src\inc\sstring.inl @ 732]
09       180 (Inline Function) --------`-------- coreclr!TypeNameBuilder::Append+0xc [c:\git\corecl2\src\vm\typestring.h @ 125]
0a         0 0000001e`c37e4cd0 00007ffd`317c175d coreclr!TypeNameBuilder::EscapeName+0x145 [c:\git\corecl2\src\vm\typestring.cpp @ 231]
0b        e0 0000001e`c37e4db0 00007ffd`317c66c6 coreclr!TypeNameBuilder::AddName+0x189 [c:\git\corecl2\src\vm\typestring.cpp @ 378]
0c        f0 0000001e`c37e4ea0 00007ffd`317c4793 coreclr!TypeString::AppendTypeDef+0x492 [c:\git\corecl2\src\vm\typestring.cpp @ 703]
0d       340 0000001e`c37e51e0 00007ffd`317c512d coreclr!TypeString::AppendNestedTypeDef+0x4cb [c:\git\corecl2\src\vm\typestring.cpp @ 729]
0e       2d0 0000001e`c37e54b0 00007ffd`317c22ae coreclr!TypeString::AppendType+0x3e1 [c:\git\corecl2\src\vm\typestring.cpp @ 999]
0f       560 0000001e`c37e5a10 00007ffd`317c25ea coreclr!TypeString::AppendInst+0x336 [c:\git\corecl2\src\vm\typestring.cpp @ 792]
10       170 0000001e`c37e5b80 00007ffd`3186775b coreclr!TypeString::AppendInst+0x1ba [c:\git\corecl2\src\vm\typestring.cpp @ 753]
11       320 0000001e`c37e5ea0 00007ffd`3186eb2d coreclr!MethodTableBuilder::BuildMethodTableThrowing+0xba7 [c:\git\corecl2\src\vm\methodtablebuilder.cpp @ 1406]
12      1300 0000001e`c37e71a0 00007ffd`31381240 coreclr!ClassLoader::CreateTypeHandleForTypeDefThrowing+0x1771 [c:\git\corecl2\src\vm\methodtablebuilder.cpp @ 12740]
13       7c0 0000001e`c37e7960 00007ffd`31382c4b coreclr!ClassLoader::CreateTypeHandleForTypeKey+0x4b4 [c:\git\corecl2\src\vm\clsload.cpp @ 3627]
14       340 0000001e`c37e7ca0 00007ffd`313945d3 coreclr!ClassLoader::DoIncrementalLoad+0x777 [c:\git\corecl2\src\vm\clsload.cpp @ 3516]
15       250 0000001e`c37e7ef0 00007ffd`31392e81 coreclr!ClassLoader::LoadTypeHandleForTypeKey_Body+0xdab [c:\git\corecl2\src\vm\clsload.cpp @ 4318]
16       3b0 0000001e`c37e82a0 00007ffd`3138c992 coreclr!ClassLoader::LoadTypeHandleForTypeKey+0x571 [c:\git\corecl2\src\vm\clsload.cpp @ 4037]
17       200 0000001e`c37e84a0 00007ffd`318561f4 coreclr!ClassLoader::LoadConstructedTypeThrowing+0xc5e [c:\git\corecl2\src\vm\clsload.cpp @ 1259]
18       210 0000001e`c37e86b0 00007ffd`31852ebd coreclr!ClassLoader::LoadCanonicalGenericInstantiation+0x62c [c:\git\corecl2\src\vm\generics.cpp @ 163]
19       220 0000001e`c37e88d0 00007ffd`31381253 coreclr!ClassLoader::CreateTypeHandleForNonCanonicalGenericInstantiation+0xda9 [c:\git\corecl2\src\vm\generics.cpp @ 214]
1a       c20 0000001e`c37e94f0 00007ffd`31382c4b coreclr!ClassLoader::CreateTypeHandleForTypeKey+0x4c7 [c:\git\corecl2\src\vm\clsload.cpp @ 3629]
1b       340 0000001e`c37e9830 00007ffd`313945d3 coreclr!ClassLoader::DoIncrementalLoad+0x777 [c:\git\corecl2\src\vm\clsload.cpp @ 3516]
1c       250 0000001e`c37e9a80 00007ffd`31392e81 coreclr!ClassLoader::LoadTypeHandleForTypeKey_Body+0xdab [c:\git\corecl2\src\vm\clsload.cpp @ 4318]
1d       3b0 0000001e`c37e9e30 00007ffd`3138c992 coreclr!ClassLoader::LoadTypeHandleForTypeKey+0x571 [c:\git\corecl2\src\vm\clsload.cpp @ 4037]
1e       200 0000001e`c37ea030 00007ffd`3138dc96 coreclr!ClassLoader::LoadConstructedTypeThrowing+0xc5e [c:\git\corecl2\src\vm\clsload.cpp @ 1259]
1f       210 0000001e`c37ea240 00007ffd`315badbd coreclr!ClassLoader::LoadGenericInstantiationThrowing+0x9b2 [c:\git\corecl2\src\vm\clsload.cpp @ 2314]
20       260 0000001e`c37ea4a0 00007ffd`313f5974 coreclr!SigPointer::GetTypeHandleThrowing+0x1615 [c:\git\corecl2\src\vm\siginfo.cpp @ 1445]
21       370 0000001e`c37ea810 00007ffd`313f3523 coreclr!CEEInfo::getFieldTypeInternal+0x3c4 [c:\git\corecl2\src\vm\jitinterface.cpp @ 9096]
22       1e0 0000001e`c37ea9f0 00007ffd`3766cb77 coreclr!CEEInfo::getFieldInfo+0x4d3 [c:\git\corecl2\src\vm\jitinterface.cpp @ 1783]
23       200 0000001e`c37eabf0 00007ffd`376662f5 clrjit!Compiler::impImportBlockCode+0x5d5b [c:\git\corecl2\src\jit\importer.cpp @ 12887]
24       f40 (Inline Function) --------`-------- clrjit!Compiler::impImportBlock::__l11::__Body::Run+0x24
25         0 0000001e`c37ebb30 00007ffd`37665b30 clrjit!Compiler::impImportBlock+0xed [c:\git\corecl2\src\jit\importer.cpp @ 15641]
26        b0 0000001e`c37ebbe0 00007ffd`37629732 clrjit!Compiler::impImport+0x324 [c:\git\corecl2\src\jit\importer.cpp @ 16717]
27        30 0000001e`c37ebc10 00007ffd`37604cde clrjit!Compiler::fgImport+0x2a [c:\git\corecl2\src\jit\flowgraph.cpp @ 6702]
28        30 0000001e`c37ebc40 00007ffd`37606c99 clrjit!Compiler::compCompile+0xd2 [c:\git\corecl2\src\jit\compiler.cpp @ 4208]
29       170 0000001e`c37ebdb0 00007ffd`37605eaf clrjit!Compiler::compCompileHelper+0x6d5 [c:\git\corecl2\src\jit\compiler.cpp @ 5802]
2a        b0 (Inline Function) --------`-------- clrjit!Compiler::compCompile::__l43::__Body::Run+0x22 [c:\git\corecl2\src\jit\compiler.cpp @ 5151]
2b         0 0000001e`c37ebe60 00007ffd`37601c9c clrjit!Compiler::compCompile+0x7b3 [c:\git\corecl2\src\jit\compiler.cpp @ 5155]
2c        d0 (Inline Function) --------`-------- clrjit!jitNativeCode::__l11::__Body::Run::__l6::__Body::Run+0xdd [c:\git\corecl2\src\jit\compiler.cpp @ 6449]
2d         0 0000001e`c37ebf30 00007ffd`3760ade4 clrjit!`jitNativeCode'::`11'::__Body::Run+0xf0 [c:\git\corecl2\src\jit\compiler.cpp @ 6476]
2e        50 0000001e`c37ebf80 00007ffd`3760e3b5 clrjit!jitNativeCode+0x15c [c:\git\corecl2\src\jit\compiler.cpp @ 6476]
2f       170 0000001e`c37ec0f0 00007ffd`31406cb8 clrjit!CILJit::compileMethod+0x155 [c:\git\corecl2\src\jit\ee_il_dll.cpp @ 299]
30        90 0000001e`c37ec180 00007ffd`31406ae9 coreclr!invokeCompileMethodHelper+0x11c [c:\git\corecl2\src\vm\jitinterface.cpp @ 12006]
31        60 0000001e`c37ec1e0 00007ffd`313e0ab9 coreclr!invokeCompileMethod+0x14d [c:\git\corecl2\src\vm\jitinterface.cpp @ 12067]
32       160 0000001e`c37ec340 00007ffd`313d76b8 coreclr!`CallCompileMethodWithSEHWrapper'::`10'::__Body::Run+0x71 [c:\git\corecl2\src\vm\jitinterface.cpp @ 12126]
33        60 0000001e`c37ec3a0 00007ffd`313e315c coreclr!CallCompileMethodWithSEHWrapper+0x94 [c:\git\corecl2\src\vm\jitinterface.cpp @ 12133]
34        70 0000001e`c37ec410 00007ffd`314696ef coreclr!UnsafeJitFunction+0x7e0 [c:\git\corecl2\src\vm\jitinterface.cpp @ 12813]
35      1050 0000001e`c37ed460 00007ffd`31465728 coreclr!MethodDesc::MakeJitWorker+0x64b [c:\git\corecl2\src\vm\prestub.cpp @ 470]
36       2a0 0000001e`c37ed700 00007ffd`3146ce55 coreclr!MethodDesc::DoPrestub+0xa9c [c:\git\corecl2\src\vm\prestub.cpp @ 1473]
37       330 0000001e`c37eda30 00007ffd`317527b5 coreclr!PreStubWorker+0x5a5 [c:\git\corecl2\src\vm\prestub.cpp @ 1073]
38       260 0000001e`c37edc90 00007ffc`d2839fda coreclr!ThePreStub+0x55 [C:\git\corecl2\src\vm\amd64\ThePreStubAMD64.asm @ 22]
39        b0 0000001e`c37edd40 00007ffc`d2839a8a System_Linq_Expressions!System.Linq.Expressions.Compiler.StackSpiller.RewriteExpression(System.Linq.Expressions.Expression, Stack)+0xfa [C:\git\corecl2\_\fx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\StackSpiller.Generated.cs @ 31]
3a        90 0000001e`c37eddd0 00007ffc`d283991b System_Linq_Expressions!System.Linq.Expressions.Compiler.StackSpiller.RewriteExpressionFreeTemps(System.Linq.Expressions.Expression, Stack)+0x3a [C:\git\corecl2\_\fx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\StackSpiller.cs @ 160]
3b        50 0000001e`c37ede20 00007ffc`d2839326 System_Linq_Expressions!System.Linq.Expressions.Compiler.StackSpiller.Rewrite[[System.__Canon, System.Private.CoreLib]](System.Linq.Expressions.Expression`1<System.__Canon>)+0x3b [C:\git\corecl2\_\fx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\StackSpiller.cs @ 107]
3c        80 0000001e`c37edea0 00007ffc`d2839179 System_Linq_Expressions!System.Linq.Expressions.Compiler.LambdaCompiler.Compile(System.Linq.Expressions.LambdaExpression)+0x36 [C:\git\corecl2\_\fx\src\System.Linq.Expressions\src\System\Linq\Expressions\Compiler\LambdaCompiler.cs @ 181]
3d        40 0000001e`c37edee0 00007ffc`d285c341 System_Linq_Expressions!System.Linq.Expressions.Expression`1[[System.__Canon, System.Private.CoreLib]].Compile(Boolean)+0x79 [C:\git\corecl2\_\fx\src\System.Linq.Expressions\src\System\Linq\Expressions\LambdaExpression.cs @ 195]
3e        40 0000001e`c37edf20 00007ffd`30a71f5f System_Linq_Expressions_Tests!System.Linq.Expressions.Tests.CompilerTests+<>c__DisplayClass1_0.<CompileDeepTree_NoStackOverflowFast>b__0()+0x41 [C:\git\corecl2\_\fx\src\System.Linq.Expressions\tests\CompilerTests.cs @ 45]
3f        40 0000001e`c37edf60 00007ffd`31955cf3 System_Private_CoreLib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+0x5f [C:\git\corecl2\src\mscorlib\src\System\Threading\ExecutionContext.cs @ 162]
40        70 0000001e`c37edfd0 00007ffd`315e397c coreclr!CallDescrWorkerInternal+0x83 [C:\git\corecl2\src\vm\amd64\CallDescrWorkerAMD64.asm @ 101]
41        40 0000001e`c37ee010 00007ffd`3132e0c6 coreclr!MethodDescCallSite::CallTargetWorker+0xdc8 [c:\git\corecl2\src\vm\callhelpers.cpp @ 653]
42       620 (Inline Function) --------`-------- coreclr!MethodDescCallSite::Call+0x16 [c:\git\corecl2\src\vm\callhelpers.h @ 433]
43         0 0000001e`c37ee630 00007ffd`312b88e8 coreclr!ThreadNative::KickOffThread_Worker+0x976 [c:\git\corecl2\src\vm\comsynchronizable.cpp @ 259]
44       3d0 0000001e`c37eea00 00007ffd`312b89d7 coreclr!ManagedThreadBase_DispatchInner+0x158 [c:\git\corecl2\src\vm\threads.cpp @ 9006]
45        d0 0000001e`c37eead0 00007ffd`312bc22e coreclr!ManagedThreadBase_DispatchMiddle+0xa3 [c:\git\corecl2\src\vm\threads.cpp @ 9057]
46       220 0000001e`c37eecf0 00007ffd`312bc4e4 coreclr!``ManagedThreadBase_DispatchOuter'::`11'::__Body::Run'::`5'::__Body::Run+0x4a [c:\git\corecl2\src\vm\threads.cpp @ 9297]
47        50 0000001e`c37eed40 00007ffd`312b8b19 coreclr!`ManagedThreadBase_DispatchOuter'::`11'::__Body::Run+0x58 [c:\git\corecl2\src\vm\threads.cpp @ 9319]
48        60 0000001e`c37eeda0 00007ffd`312b8c68 coreclr!ManagedThreadBase_DispatchOuter+0xad [c:\git\corecl2\src\vm\threads.cpp @ 9319]
49        80 0000001e`c37eee20 00007ffd`312b8177 coreclr!ManagedThreadBase_FullTransitionWithAD+0x114 [c:\git\corecl2\src\vm\threads.cpp @ 9355]
4a       120 0000001e`c37eef40 00007ffd`3132d66b coreclr!ManagedThreadBase::KickOff+0xf [c:\git\corecl2\src\vm\threads.cpp @ 9391]
4b        30 0000001e`c37eef70 00007ffd`312c2fab coreclr!ThreadNative::KickOffThread+0x2ab [c:\git\corecl2\src\vm\comsynchronizable.cpp @ 379]
4c       200 0000001e`c37ef170 00007ffd`72fb8364 coreclr!Thread::intermediateThreadProc+0x8b [c:\git\corecl2\src\vm\threads.cpp @ 2597]
4d       8c0 0000001e`c37efa30 00007ffd`73f070d1 KERNEL32!BaseThreadInitThunk+0x14 [d:\rs1\base\win32\client\thread.c @ 64]
4e        30 0000001e`c37efa60 00000000`00000000 ntdll!RtlUserThreadStart+0x21 [d:\rs1\minkernel\ntdll\rtlstrt.c @ 997]

@JonHanna
Copy link
Contributor

The purpose of the small stack is simply to reach the point where it would overflow where it not for the guard against that, in a timely manner. A larger stack that works but is still reasonably prompt would be just as good (though it takes some fiddling to figure out the size of query large enough to hit the threshold but no so large as to take forever doing so).

But if the outerloop tests will be run, we've a canary about issues specific to this build type, and if the fast version is still run in the tests people run while hacking on expressions, we've a prompt signal if they break things, so just disabling this test for this build would be fine IMO.

@RussKeldorph
Copy link
Contributor Author

If I understand the code correctly (not necessarily safe to assume), then I don't think this test is "tuned" based on your description. The test is providing for a 64k stack, but TryEnsureSufficientExecutionStack will return false if the remaining stack is less than 64k, so I don't think the size of the query has any bearing on whether a different thread is used to run the query. I believe the test would have to run on a larger thread stack for the size of the query to have some bearing on the test outcome.

At any rate, if you think it's best to disable the test for our runs, can you suggest how to do that? I see some examples of "Traits" and "Categories" that are used to disable tests, but I'm not sure what's appropriate here. It's fine to require us to pass a switch (e.g. /p:WithoutCategories=IgnoreForCI) on the build-tests command line.

@JonHanna
Copy link
Contributor

So maybe around 192k would be enough to let it pass for this case?

@RussKeldorph
Copy link
Contributor Author

RussKeldorph commented Mar 28, 2017

I tried changing stack size here to 192k. The test now passes with a Checked runtime, and this line is hit multiple times during the test, which I think indicates the code is taking the intended path. If I increase the stack size to 256k, the "false" path is no longer taken, so that would be too much stack. This is all with a Checked runtime. I haven't tried a Release runtime.

Changing the stack size seems like a more promising path than disabling the test to me.

@JonHanna
Copy link
Contributor

That sounds perfect.

@RussKeldorph
Copy link
Contributor Author

@JonHanna Just to be clear: are you planning to make this change, or do you need me to? I'm blocked, so I don't mind, but I'd just as soon you do it. :)

@JonHanna
Copy link
Contributor

I'll open a PR shortly.

JonHanna referenced this issue in JonHanna/corefx Mar 28, 2017
Should allow it to run with checked coreclr builds, but still
test the stack-overflow guards without running for a long time.

Fixes #17550
JonHanna referenced this issue in JonHanna/corefx Mar 28, 2017
Should allow it to run with checked coreclr builds, but still
test the stack-overflow guards without running for a long time.

Fixes #17550
JonHanna referenced this issue in JonHanna/corefx Mar 29, 2017
Should allow it to run with checked coreclr builds, but still
test the stack-overflow guards without running for a long time.

Fixes #17550
JonHanna referenced this issue in JonHanna/corefx Mar 29, 2017
Should allow it to run with checked coreclr builds, but still
test the stack-overflow guards without running for a long time.

Fixes #17550
@msftgits msftgits transferred this issue from dotnet/corefx Jan 31, 2020
@msftgits msftgits added this to the 2.0.0 milestone Jan 31, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Dec 24, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

5 participants