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.

Reply via email to