https://bugs.kde.org/show_bug.cgi?id=472329
--- Comment #10 from Paul Floyd <[email protected]> --- I can reproduce the error from m with GCC 14 on FreeBSD. This doesn't look like the original problem, at least not superficially. Trying to dig a bit deeper 400c26: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) ; if (this->_M_is_engaged()) 400c30: 80 7d 80 00 cmpb $0x0, -0x80(%rbp) 400c34: 74 99 je 0x400bcf <ExecuteLogic[abi:cxx11]()+0xff> ; int64_t calculated_target = base_threshold - ExtractValue(input_data, flag_mode_selector).value_or(0); 400c36: 4c 2b a5 78 ff ff ff subq -0x88(%rbp), %r12 ; return std::move(this->_M_get()); 400c3d: eb 90 jmp 0x400bcf <ExecuteLogic[abi:cxx11]()+0xff> 400c3f: 90 nop ; return std::pointer_traits<pointer>::pointer_to(*_M_local_buf); 400c40: 48 8d 43 10 leaq 0x10(%rbx), %rax ; return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n)); 400c44: c6 43 10 00 movb $0x0, 0x10(%rbx) ; _M_index{_Np} 400c48: 31 ff xorl %edi, %edi ; return std::pointer_traits<pointer>::pointer_to(*_M_local_buf); 400c4a: 48 89 03 movq %rax, (%rbx) ; { _M_string_length = __length; } 400c4d: 48 c7 43 08 00 00 00 00 movq $0x0, 0x8(%rbx) ; _M_index{_Np} 400c55: c6 43 20 01 movb $0x1, 0x20(%rbx) ; ~__new_allocator() _GLIBCXX_USE_NOEXCEPT { } 400c59: eb a9 jmp 0x400c04 <ExecuteLogic[abi:cxx11]()+0x134> 400c5b: 0f 1f 44 00 00 nopl (%rax,%rax) ; opaque_barrier(&input_data); 400c60: 4c 89 ef movq %r13, %rdi 400c63: e8 f8 00 00 00 callq 0x400d60 <opaque_barrier(void*)> ; if (calculated_target <= 0) { 400c68: 4d 85 e4 testq %r12, %r12 400c6b: 0f 8e 78 ff ff ff jle 0x400be9 <ExecuteLogic[abi:cxx11]()+0x119> ; if (use_primary) { 400c71: 80 bd 33 ff ff ff 00 cmpb $0x0, -0xcd(%rbp) 400c78: 0f 84 82 00 00 00 je 0x400d00 <ExecuteLogic[abi:cxx11]()+0x230> ; : _M_value(std::forward<_Args>(__args)...) 400c7e: 48 8b 55 c0 movq -0x40(%rbp), %rdx 400c82: 31 c0 xorl %eax, %eax ; if (calculated_target > current_buffer_val) { it's the cmpq / jl below that triggers the error 400c84: 4c 39 e2 cmpq %r12, %rdx 400c87: 0f 8c 5c ff ff ff jl 0x400be9 <ExecuteLogic[abi:cxx11]()+0x119> 400c8d: 84 c0 testb %al, %al 400c8f: 0f 85 54 ff ff ff jne 0x400be9 <ExecuteLogic[abi:cxx11]()+0x119> >From what I read r12 contains calculated_target and so rdx contans current_buffer_val. There is a previous 'if' checking caclulated_target/r12 so the culprit is probably current_buffer_val/rdx. That looks more like the original problem. ExtractValue use_primary is false so it returns obj.field_secondary which is a std::optional<int64_t> field_secondary. That's default initialised so doesn't contain a value. value_or(0) should return 0 (and be initialised). In gdb I see calculated_target/r12 contains 14769726 which looks right to me. rdx contains 1. How can that be? -- You are receiving this mail because: You are watching all bug changes.
