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.

Reply via email to