Some ProcessSwap API tests are crashing in debug since enabling process prewiring by default in r238294: Crashed TestWebKitAPI.ProcessSwap.PageShowHide _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. Received data during response processing, queuing it. _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. Received data during response processing, queuing it. ASSERTION FAILED: m_uncommittedState.state == State::Committed /Volumes/Data/slave/mojave-debug/build/Source/WebKit/UIProcess/PageLoadState.cpp(298) : void WebKit::PageLoadState::didFinishLoad(const Transaction::Token &) 1 0x10ab2cb59 WTFCrash 2 0x10f96095b WTFCrashWithInfo(int, char const*, char const*, int) 3 0x11002d4dd WebKit::PageLoadState::didFinishLoad(WebKit::PageLoadState::Transaction::Token const&) 4 0x11020a1bf WebKit::WebPageProxy::didFinishLoadForFrame(unsigned long long, unsigned long long, WebKit::UserData const&) 5 0x110b2efee void IPC::callMemberFunctionImpl<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WebKit::UserData>, 0ul, 1ul, 2ul>(WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WebKit::UserData>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) 6 0x110b2ed10 void IPC::callMemberFunction<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WebKit::UserData>, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul> >(std::__1::tuple<unsigned long long, unsigned long long, WebKit::UserData>&&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&)) 7 0x110b0b9ab void IPC::handleMessage<Messages::WebPageProxy::DidFinishLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&)>(IPC::Decoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WebKit::UserData const&)) 8 0x110b00f18 WebKit::WebPageProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) 9 0x10fa0fdca IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&) 10 0x10ffecb84 WebKit::ChildProcessProxy::dispatchMessage(IPC::Connection&, IPC::Decoder&) 11 0x1102e1e3a WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) 12 0x10f9a7e5c IPC::Connection::dispatchMessage(IPC::Decoder&) 13 0x10f99a241 IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >) 14 0x10f9a52b1 IPC::Connection::dispatchIncomingMessages() 15 0x10f9c9ee6 IPC::Connection::MessagesThrottler::scheduleMessagesDispatch()::$_15::operator()() 16 0x10f9c9dd9 WTF::Function<void ()>::CallableWrapper<IPC::Connection::MessagesThrottler::scheduleMessagesDispatch()::$_15>::call() 17 0x10ab5445d WTF::Function<void ()>::operator()() const 18 0x10abad1d3 WTF::RunLoop::performWork() 19 0x10abadb64 WTF::RunLoop::performWork(void*) 20 0x7fff32342f09 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 21 0x7fff32342eaf __CFRunLoopDoSource0 22 0x7fff32326d5c __CFRunLoopDoSources0 23 0x7fff32326303 __CFRunLoopRun 24 0x7fff32325be6 CFRunLoopRunSpecific 25 0x7fff346aa3ba -[NSRunLoop(NSRunLoop) runMode:beforeDate:] 26 0x109d5ebc6 TestWebKitAPI::Util::run(bool*) 27 0x109bca7ed ProcessSwap_PageShowHide_Test::TestBody() 28 0x109f2234e void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 29 0x109ec9d5b void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 30 0x109ec9c86 testing::Test::Run() 31 0x109ecb922 testing::TestInfo::Run() 2018-11-16 14:18:27.331 com.apple.WebKit.WebContent.Development[94550:12325391] Application does not have the 'com.apple.security.network.client' entitlement. TestWebKitAPI.WKWebViewMacEditingTests.DoNotCrashWhenInterpretingKeyEventWhileDeallocatingView _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. ASSERTION FAILED: sendRightCount >= 1 /Volumes/Data/slave/mojave-debug/build/Source/WebKit/UIProcess/Launcher/mac/ProcessLauncherMac.mm(251) : void WebKit::ProcessLauncher::launchProcess()_block_invoke 1 0x10762fb59 WTFCrash 2 0x10c7ee95b WTFCrashWithInfo(int, char const*, char const*, int) 3 0x10d003875 invocation function for block in WebKit::ProcessLauncher::launchProcess() 4 0x7fff5f7d69b1 _xpc_connection_reply_callout 5 0x7fff5f7d6938 _xpc_connection_call_reply_async 6 0x7fff5f552e39 _dispatch_client_callout3 7 0x7fff5f5693b0 _dispatch_mach_msg_async_reply_invoke 8 0x7fff5f55de25 _dispatch_main_queue_callback_4CF 9 0x7fff32327051 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 10 0x7fff32326763 __CFRunLoopRun 11 0x7fff32325be6 CFRunLoopRunSpecific 12 0x7fff346aa3ba -[NSRunLoop(NSRunLoop) runMode:beforeDate:] 13 0x106863bc6 TestWebKitAPI::Util::run(bool*) 14 0x106979f55 WKWebViewMacEditingTests_DoNotCrashWhenInterpretingKeyEventWhileDeallocatingView_Test::TestBody() 15 0x106a2734e void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 16 0x1069ced5b void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 17 0x1069cec86 testing::Test::Run() 18 0x1069d0922 testing::TestInfo::Run() 19 0x1069d1fac testing::TestCase::Run() 20 0x1069eb315 testing::internal::UnitTestImpl::RunAllTests() 21 0x106a2b54e bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) 22 0x1069ead3b bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) 23 0x1069eabfc testing::UnitTest::Run() 24 0x1067b2251 RUN_ALL_TESTS() 25 0x1067b21e4 TestWebKitAPI::TestsController::run(int, char**) 26 0x10698927e main 27 0x7fff5f5a108d start 28 0x2 TestWebKitAPI.ProcessSwap.NavigationWithLockedHistoryWithoutPSON _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. Received data during response processing, queuing it. Received data during response processing, queuing it. _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. ASSERTION FAILED: process->hasOneRef() /Volumes/Data/slave/mojave-debug/build/Source/WebKit/UIProcess/WebProcessPool.cpp(344) : virtual WebKit::WebProcessPool::~WebProcessPool() 1 0x10cff1b59 WTFCrash 2 0x11305395b WTFCrashWithInfo(int, char const*, char const*, int) 3 0x1139b0441 WebKit::WebProcessPool::~WebProcessPool() 4 0x1139b1d35 WebKit::WebProcessPool::~WebProcessPool() 5 0x113647b8e -[WKProcessPool dealloc] 6 0x113686cc6 WTF::RetainPtr<WKProcessPool>::~RetainPtr() 7 0x113686c55 WTF::RetainPtr<WKProcessPool>::~RetainPtr() 8 0x113686c39 LazyInitialized<WTF::RetainPtr<WKProcessPool> >::~LazyInitialized() 9 0x11367bfd5 LazyInitialized<WTF::RetainPtr<WKProcessPool> >::~LazyInitialized() 10 0x11367bebf -[WKWebViewConfiguration .cxx_destruct] 11 0x7fff5e4d51f5 object_cxxDestructFromClass(objc_object*, objc_class*) 12 0x7fff5e4cd9f0 objc_destructInstance 13 0x7fff5e4cd992 object_dispose 14 0x1136933f6 WTF::RetainPtr<WKWebViewConfiguration>::~RetainPtr() 15 0x11366fdb5 WTF::RetainPtr<WKWebViewConfiguration>::~RetainPtr() 16 0x11366fd48 -[WKWebView .cxx_destruct] 17 0x7fff5e4d51f5 object_cxxDestructFromClass(objc_object*, objc_class*) 18 0x7fff5e4cd9f0 objc_destructInstance 19 0x7fff5e4cd992 object_dispose 20 0x7fff2f970849 -[NSResponder dealloc] 21 0x7fff2f96ebb4 -[NSView dealloc] 22 0x113663e6e -[WKWebView dealloc] 23 0x7fff5e4ce7c2 (anonymous namespace)::AutoreleasePoolPage::pop(void*) 24 0x7fff322f8d42 _CFAutoreleasePoolPop 25 0x7fff346c396e -[NSAutoreleasePool drain] 26 0x10c34b297 main 27 0x7fff5f5a108d start 28 0x2 Testing completed, Exit status: 3
I managed to make the assertion a bit more likely to reproduce like so: diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm index ff3fd087426..7f741e2b199 100644 --- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm +++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm @@ -1969,6 +1969,10 @@ window.addEventListener('load', function(event) { TEST(ProcessSwap, LoadUnload) { + for (int i=0; i < 30; ++i) { + @autoreleasepool { + receivedMessages = adoptNS([@[] mutableCopy]); + auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); [processPoolConfiguration setProcessSwapsOnNavigation:YES]; auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]); @@ -2024,6 +2028,8 @@ TEST(ProcessSwap, LoadUnload) EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html - load", receivedMessages.get()[4]); EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html - unload", receivedMessages.get()[5]); EXPECT_WK_STREQ(@"pson://www.apple.com/main.html - load", receivedMessages.get()[6]); + } + } } When it asserts the state is Finished instead of Committed.
(In reply to Chris Dumez from comment #1) > I managed to make the assertion a bit more likely to reproduce like so: > diff --git > a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm > b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm > index ff3fd087426..7f741e2b199 100644 > --- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm > +++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm > @@ -1969,6 +1969,10 @@ window.addEventListener('load', function(event) { > > TEST(ProcessSwap, LoadUnload) > { > + for (int i=0; i < 30; ++i) { > + @autoreleasepool { > + receivedMessages = adoptNS([@[] mutableCopy]); > + > auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration > alloc] init]); > [processPoolConfiguration setProcessSwapsOnNavigation:YES]; > auto processPool = adoptNS([[WKProcessPool alloc] > _initWithConfiguration:processPoolConfiguration.get()]); > @@ -2024,6 +2028,8 @@ TEST(ProcessSwap, LoadUnload) > EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html - load", > receivedMessages.get()[4]); > EXPECT_WK_STREQ(@"pson://www.webkit.org/main.html - unload", > receivedMessages.get()[5]); > EXPECT_WK_STREQ(@"pson://www.apple.com/main.html - load", > receivedMessages.get()[6]); > + } > + } > } > > When it asserts the state is Finished instead of Committed. So it means that when didFinishLoad() is called, one of the following has already been called: - didFinishLoad() - reset() - didFailProvisionalLoad() - didFailLoad()
I have also seen this variant: ASSERTION FAILED: m_uncommittedState.state == State::Provisional /Volumes/Data/WebKit/OpenSource/Source/WebKit/UIProcess/PageLoadState.cpp(285) : void WebKit::PageLoadState::didCommitLoad(const Transaction::Token &, WebKit::WebCertificateInfo &, bool) _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL. 1 0x107fa80d9 WTFCrash 2 0x10cddf2fb WTFCrashWithInfo(int, char const*, char const*, int) 3 0x10d4abcc8 WebKit::PageLoadState::didCommitLoad(WebKit::PageLoadState::Transaction::Token const&, WebKit::WebCertificateInfo&, bool) 4 0x10d68a7b6 WebKit::WebPageProxy::didCommitLoadForFrame(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&) 5 0x10dfad143 void IPC::callMemberFunctionImpl<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WTF::String, bool, unsigned int, WebCore::CertificateInfo, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData>, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul>(WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WTF::String, bool, unsigned int, WebCore::CertificateInfo, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul>) 6 0x10dfabc60 void IPC::callMemberFunction<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&), std::__1::tuple<unsigned long long, unsigned long long, WTF::String, bool, unsigned int, WebCore::CertificateInfo, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData>, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul> >(std::__1::tuple<unsigned long long, unsigned long long, WTF::String, bool, unsigned int, WebCore::CertificateInfo, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData>&&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&)) 7 0x10df8a3e5 void IPC::handleMessage<Messages::WebPageProxy::DidCommitLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&)>(IPC::Decoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, bool, unsigned int, WebCore::CertificateInfo const&, bool, std::optional<WebCore::HasInsecureContent>, WebKit::UserData const&)) 8 0x10df7fd16 WebKit::WebPageProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) 9 0x10ce8ec0a IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&) 10 0x10d46b2e4 WebKit::ChildProcessProxy::dispatchMessage(IPC::Connection&, IPC::Decoder&) 11 0x10d76341a WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) 12 0x10ce267cc IPC::Connection::dispatchMessage(IPC::Decoder&) 13 0x10ce18bb1 IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >) 14 0x10ce23c21 IPC::Connection::dispatchIncomingMessages() 15 0x10ce480b2 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14::operator()() 16 0x10ce47fd9 WTF::Function<void ()>::CallableWrapper<IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14>::call() 17 0x107fcf87d WTF::Function<void ()>::operator()() const 18 0x108028413 WTF::RunLoop::performWork() 19 0x108028da4 WTF::RunLoop::performWork(void*) 20 0x7fff4ed19195 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 21 0x7fff4ed1913b __CFRunLoopDoSource0 22 0x7fff4ecfcbd5 __CFRunLoopDoSources0 23 0x7fff4ecfc17e __CFRunLoopRun 24 0x7fff4ecfba68 CFRunLoopRunSpecific 25 0x7fff511246ba -[NSRunLoop(NSRunLoop) runMode:beforeDate:] 26 0x1071d8736 TestWebKitAPI::Util::run(bool*) 27 0x107045ab7 ProcessSwap_LoadUnload_Test::TestBody() 28 0x10739fcfe void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 29 0x1073477eb void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) 30 0x107347716 testing::Test::Run() 31 0x1073493b2 testing::TestInfo::Run() LEAK: 1 WebPage
I wonder if we're trying to load a new page while we're still pre-warming a process? e.g. right after we've committed a page load.
In happens in tests that use back/forward navigations, I suspect this is caused by: 1. Load origin A in P1 2. Load origin B in P2 (Process Swap) -> Causes P1 to get navigated to about:blank for suspension 3. Navigate back before P1 has finished navigating to about:blank. P1 tells the WebPageProxy didFinishLoad or didCommitLoad for 'about:blank', which it does not expect since it did not request that load.
Created attachment 355183 [details] WIP Patch Proof of concept.
Created attachment 355197 [details] Patch
Comment on attachment 355197 [details] Patch Clearing flags on attachment: 355197 Committed r238353: <https://trac.webkit.org/changeset/238353>
All reviewed patches have been landed. Closing bug.
<rdar://problem/46151872>
WinCairo (the bots for which all suddenly disconnected this morning and haven't come back online 😰) has a broken build with the following error: > FAILED: Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/unified-sources/UnifiedSource25.cpp.obj > ... > C:\GitHub\neko\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Ref.h(60): error C2039: 'deref': is not a member of 'WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45>' > C:\GitHub\neko\Source\WebKit\UIProcess/WebPageProxy.cpp(2723): note: see declaration of 'WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45>' > C:\GitHub\neko\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/Ref.h(54): note: while compiling class template member function 'WTF::Ref<WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45>,WTF::DumbPtrTraits<T>>::~Ref(void)' > with > [ > T=WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45> > ] > C:\GitHub\neko\Source\WebKit\UIProcess/WebPageProxy.cpp(2712): note: see reference to function template instantiation 'WTF::Ref<WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45>,WTF::DumbPtrTraits<T>>::~Ref(void)' being compiled > with > [ > T=WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45> > ] > C:\GitHub\neko\Source\WebKit\UIProcess/WebPageProxy.cpp(2700): note: see reference to class template instantiation 'WTF::Ref<WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45>,WTF::DumbPtrTraits<T>>' being compiled > with > [ > T=WebKit::WebPageProxy::continueNavigationInNewProcess::<lambda_a497dfd3aa776334b389d665d3f26b45> > ] > c:\github\neko\webkitbuild\release\derivedsources\forwardingheaders\javascriptcore\CodeBlock.h(950): note: see reference to class template instantiation 'WTF::Poisoned<JSC::CodeBlockPoison,JSC::VM *,void>' being compiled
That looks like some kind of a compiler bug... I guess someone who has access to VS.net has to debug that.
(In reply to Ryosuke Niwa from comment #12) > That looks like some kind of a compiler bug... I guess someone who has > access to VS.net has to debug that. Thankfully, it looks like this issue has precedent. https://trac.webkit.org/changeset/233195 https://trac.webkit.org/changeset/230162 Committed r238358: <https://trac.webkit.org/changeset/238358>