Presumably this: https://source.chromium.org/chromium/chromium/src/+/main:v8/include/v8-memory-span.h;l=124;drc=d350ca68909171a740a8e33c43fea86ed0574a05
just needs to be: : data_(first == last ? nullptr : to_address(first)), size_(last - first) {} ? On Thursday, 26 June 2025 at 18:45:04 UTC+1 niko...@google.com wrote: > The problem arises at this point > <https://source.chromium.org/chromium/chromium/src/+/main:v8/src/compiler/js-heap-broker.cc;drc=ef9dafb5ab5b78fef65ce358dd92c2b60d69cee5;l=882>, > > when possible_transition_targets is empty. > > It seems that the following program runs successfully with clang, both in > Linux and Windows. > However, it fails with MSVC, exactly with the assertion failure that > you're getting. > > #include <cassert> > #include <vector> > > int main() { > std::vector < int> empty; > assert(nullptr == empty.begin().operator->()); > } > > I will investigate some more and come back with a fix. > Thank you for reporting! > > On Wednesday, June 25, 2025 at 9:57:43 PM UTC+2 audrius.b...@gmail.com > wrote: > >> Seems that I've hit the same case without Maglev: >> >> ==== C stack trace =============================== >> >> >> std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::pair<int,v8::internal::Tagged<v8::internal::HeapObject> >> >> > > > >::operator-> [0x00007FFB8C978EB1+369] >> v8::MemorySpan<v8::internal::Handle<v8::internal::Map> >> >::to_address<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<v8::internal::Handle<v8::internal::Map> >> > >> > > >,void> [0x00007FFB8D13EC83+19] >> v8::MemorySpan<v8::internal::Handle<v8::internal::Map> >> >::MemorySpan<v8::internal::Handle<v8::internal::Map> >> ><std::_Vector_iterator<std::_Vector_val<std::_Simple_types<v8::internal::Handle<v8::internal::Map> >> > >> > > >,1> [0x00007FFB8D13E704+52] >> >> v8::internal::compiler::JSHeapBroker::ProcessFeedbackMapsForElementAccess >> [0x00007FFB8E57704A+714] >> >> v8::internal::compiler::JSHeapBroker::ReadFeedbackForPropertyAccess >> [0x00007FFB8E5788E1+1841] >> >> v8::internal::compiler::JSHeapBroker::GetFeedbackForPropertyAccess >> [0x00007FFB8E573848+88] >> >> v8::internal::compiler::JSNativeContextSpecialization::ReducePropertyAccess >> [0x00007FFB8EB83319+681] >> >> v8::internal::compiler::JSNativeContextSpecialization::ReduceJSSetKeyedProperty >> >> [0x00007FFB8EB7EF21+321] >> v8::internal::compiler::JSNativeContextSpecialization::Reduce >> [0x00007FFB8EB73019+649] >> v8::internal::compiler::Reducer::Reduce [0x00007FFB8E93D1EC+60] >> v8::internal::compiler::GraphReducer::Reduce >> [0x00007FFB8E93CEBE+190] >> v8::internal::compiler::GraphReducer::ReduceTop >> [0x00007FFB8E93D708+600] >> v8::internal::compiler::GraphReducer::ReduceNode >> [0x00007FFB8E93D32E+174] >> v8::internal::compiler::GraphReducer::ReduceGraph >> [0x00007FFB8E93D278+40] >> v8::internal::compiler::InliningPhase::Run >> [0x00007FFB8E4E7CBE+1950] >> >> v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::InliningPhase> >> >> [0x00007FFB8E49B71B+123] >> v8::internal::compiler::PipelineImpl::CreateGraph >> [0x00007FFB8E4D03C8+168] >> v8::internal::compiler::PipelineCompilationJob::ExecuteJobImpl >> [0x00007FFB8E4D205C+428] >> v8::internal::OptimizedCompilationJob::ExecuteJob >> [0x00007FFB8CB5E11B+299] >> v8::internal::OptimizingCompileDispatcher::CompileNext >> [0x00007FFB8D0390A3+67] >> v8::internal::OptimizingCompileDispatcher::CompileTask::Run >> [0x00007FFB8D03A2F9+633] >> v8::platform::DefaultJobWorker::Run [0x00007FFB8CD835F9+185] >> v8::platform::DefaultWorkerThreadsTaskRunner::WorkerThread::Run >> [0x00007FFB8CD83E72+194] >> v8::base::Thread::NotifyStartedAndRun [0x00007FFB8C6D8904+52] >> v8::base::OS::StrNCpy [0x00007FFB8C6D964D+205] >> thread_start<unsigned int (__cdecl*)(void *),1> >> [0x00007FFB8F67B6B5+165] >> (minkernel\crts\ucrt\src\appcrt\startup\thread.cpp:97) >> BaseThreadInitThunk [0x00007FFCBDDA7374+20] >> RtlUserThreadStart [0x00007FFCBFDBCC91+33] >> >> I suspect this thread is what triggered it: >> >> 0 # NtWaitForAlertByThreadId in ntdll+0xa0f24 >> 1 # RtlAcquireSRWLockExclusive in ntdll+0x29205 >> 2 # v8::base::SharedMutex::LockExclusive in app+0x59258f >> 3 # >> `v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2>::operator() >> >> in app+0xea0a99 >> 4 # >> v8::internal::LocalHeap::ParkAndExecuteCallback<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> > in app+0xe9f7c8 >> 5 # >> `v8::internal::LocalHeap::ExecuteWhileParked<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> >'::`2'::<lambda_1>::operator() in app+0xea0749 >> 6 # >> heap::base::Stack::SetMarkerAndCallbackImpl<`v8::internal::LocalHeap::ExecuteWhileParked<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> >'::`2'::<lambda_1> > in app+0xe9f99b >> 7 # PushAllRegistersAndIterateStack in app+0xf65abd >> 8 # heap::base::Stack::TrampolineCallbackHelper in app+0x7f3737 >> 9 # >> heap::base::Stack::SetMarkerAndCallback<`v8::internal::LocalHeap::ExecuteWhileParked<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> >'::`2'::<lambda_1> > in app+0xe9f8d4 >> 10 # >> v8::internal::LocalHeap::ExecuteWithStackMarker<`v8::internal::LocalHeap::ExecuteWhileParked<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> >'::`2'::<lambda_1> > in app+0xe9edfe >> 11 # >> v8::internal::LocalHeap::ExecuteWhileParked<`v8::internal::ParkedSharedMutexGuardIf<1,0>::ParkedSharedMutexGuardIf<1,0>'::`25'::<lambda_2> >> >> > in app+0xe9ec55 >> 12 # >> v8::internal::ParkedSharedMutexGuardIf<0,0>::ParkedSharedMutexGuardIf<0,0> >> in app+0xea01dd >> 13 # >> v8::internal::ParkedSharedMutexGuardIf<0,0>::ParkedSharedMutexGuardIf<0,0> >> in app+0xea022a >> 14 # v8::internal::MapUpdater::ReconfigureToDataField in app+0xeaaa4d >> 15 # v8::internal::Map::Update in app+0x80f4c7 >> 16 # v8::internal::Map::TransitionToDataProperty in app+0x80cf20 >> 17 # v8::internal::LookupIterator::PrepareTransitionToDataProperty in >> app+0x9d3cc5 >> 18 # v8::internal::Object::TransitionAndWriteDataProperty in >> app+0x642167 >> 19 # v8::internal::Object::AddDataProperty in app+0x5fc92e >> 20 # v8::internal::JSObject::DefineOwnPropertyIgnoreAttributes in >> app+0x754a99 >> 21 # v8::internal::JSObject::DefineOwnPropertyIgnoreAttributes in >> app+0x754b5e >> 22 # v8::internal::JSObject::SetOwnPropertyIgnoreAttributes in >> app+0x778e02 >> 23 # >> v8::internal::CastTraits<v8::internal::ObjectBoilerplateDescription>::AllowFrom >> >> in app+0x1fd8252 >> 24 # >> v8::internal::CastTraits<v8::internal::ObjectBoilerplateDescription>::AllowFrom >> >> in app+0x1fd6f4a >> 25 # >> v8::internal::Cast<v8::internal::ObjectBoilerplateDescription,v8::internal::Object> >> >> in app+0x1fd6c66 >> 26 # >> v8::internal::Cast<v8::internal::ObjectBoilerplateDescription,v8::internal::Object> >> >> in app+0x1fd65d7 >> 27 # v8::internal::AllocationSiteUsageContext::ShouldCreateMemento in >> app+0x1fe14a8 >> 28 # v8::internal::Runtime_CreateObjectLiteral in app+0x1fd93b4 >> On Wednesday, 25 June 2025 at 17:16:00 UTC+1 Audrius Butkevicius wrote: >> >>> I've actually posted stacktraces of other threads on the user list ( >>> https://groups.google.com/g/v8-users/c/iaD_4IGqIyI) which hints this is >>> a race condition. >>> Seems that the code on head hasn't changed around this, so it still >>> might be a bug now, but confirmed, the issue goes away by switching off >>> maglev. >>> >>> On Wednesday, 25 June 2025 at 13:55:06 UTC+1 in...@bnoordhuis.nl wrote: >>> >>>> On Wed, Jun 25, 2025 at 2:11 PM Audrius Butkevicius >>>> <audrius.b...@gmail.com> wrote: >>>> > >>>> > Hi >>>> > >>>> > I'm running my application in debug mode, and I noticed it sometimes >>>> it fails with his assert: >>>> > >>>> > C:\Program Files\Microsoft Visual >>>> Studio\2022\Community\VC\Tools\MSVC\14.43.34808\include\vector(280) : >>>> Assertion failed: can't dereference out of range vector iterator >>>> > >>>> > ... >>>> > >>>> > 3 # `DllMain'::`5'::<lambda_1>::operator() at dllmain.cpp:598 >>>> (app+0x371a7cd) >>>> > 4 # `DllMain'::`5'::<lambda_1>::<lambda_invoker_cdecl> at >>>> dllmain.cpp:614 (app+0x371a668) >>>> > 5 # _VCrtDbgReportA at dbgrptt.cpp:391 (app+0x361df8f) >>>> > 6 # _CrtDbgReport at dbgrpt.cpp:263 (app+0x35ee779) >>>> > 7 # >>>> std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::pair<int,v8::internal::Tagged<v8::internal::HeapObject> >>>> >>>> > > > >::operator-> in app+0x92054c >>>> > 8 # v8::MemorySpan<v8::internal::Handle<v8::internal::Map> >>>> >::to_address<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<v8::internal::Handle<v8::internal::Map> >>>> > >>>> > > >,void> in app+0x10e5643 >>>> > 9 # v8::MemorySpan<v8::internal::Handle<v8::internal::Map> >>>> >::MemorySpan<v8::internal::Handle<v8::internal::Map> >>>> ><std::_Vector_iterator<std::_Vector_val<std::_Simple_types<v8::internal::Handle<v8::internal::Map> >>>> > >>>> > > >,1> in app+0x10e50c4 >>>> > 10 # >>>> v8::internal::compiler::JSHeapBroker::ProcessFeedbackMapsForElementAccess >>>> in app+0x251e77a >>>> > 11 # >>>> v8::internal::compiler::JSHeapBroker::ReadFeedbackForPropertyAccess in >>>> app+0x2520011 >>>> > 12 # >>>> v8::internal::compiler::JSHeapBroker::GetFeedbackForPropertyAccess in >>>> app+0x251af78 >>>> > 13 # v8::internal::maglev::MaglevGraphBuilder::VisitStaInArrayLiteral >>>> in app+0x2862834 >>>> > 14 # v8::internal::maglev::MaglevGraphBuilder::VisitSingleBytecode in >>>> app+0x2343e8f >>>> > 15 # v8::internal::maglev::MaglevGraphBuilder::BuildBody in >>>> app+0x230b567 >>>> > 16 # v8::internal::maglev::MaglevGraphBuilder::Build in app+0x230b385 >>>> > 17 # v8::internal::maglev::MaglevCompiler::Compile in app+0x230bd91 >>>> > 18 # v8::internal::maglev::MaglevCompilationJob::ExecuteJobImpl in >>>> app+0xfe89b8 >>>> > 19 # v8::internal::OptimizedCompilationJob::ExecuteJob in >>>> app+0xb0583b >>>> > 20 # v8::internal::maglev::MaglevConcurrentDispatcher::JobTask::Run >>>> in app+0xfe9c23 >>>> > 21 # v8::platform::DefaultJobWorker::Run in app+0xd2a949 >>>> > 22 # v8::platform::DefaultWorkerThreadsTaskRunner::WorkerThread::Run >>>> in app+0xd2b1c2 >>>> > 23 # v8::base::Thread::NotifyStartedAndRun in app+0x681104 >>>> > 24 # v8::base::OS::StrNCpy in app+0x681e4d >>>> > 25 # thread_start<unsigned int (__cdecl*)(void *),1> at thread.cpp:97 >>>> (app+0x3622e45) >>>> > 26 # BaseThreadInitThunk in KERNEL32+0x17374 >>>> > 27 # RtlUserThreadStart in ntdll+0x4cc91 >>>> > >>>> > It's possible that I'm doing something wrong, but it's not very clear >>>> what. >>>> > >>>> > Sadly, this is version 12.9.202, as I still need a static build that >>>> uses MSVC. >>>> > >>>> > Any suggestions would be welcome, as to what I'm doing wrong. >>>> > >>>> > Thanks. >>>> >>>> Maybe try building with v8_enable_maglev=false. In node, we had maglev >>>> disabled until at least 12.8 because of various crashes. >>>> >>> -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/v8-dev/a7ddc856-1f56-498f-a267-3c0b9cee5deen%40googlegroups.com.