https://bugs.kde.org/show_bug.cgi?id=485276

--- Comment #6 from Paul Floyd <pjfl...@wanadoo.fr> ---
│      244      _LIBCPP_INLINE_VISIBILITY
│      245      _LIBCPP_CONSTEXPR_SINCE_CXX20 ~__optional_destruct_base()
│      246      {
│  >   247          if (__engaged_) 
│      248              __val_.~value_type();
│      249      } 

Not sure what is happening. The error occurs as above, but it's not just
__engaged_ that is not initialized, this points to an uninitialized object.

(gdb) mc xb &__engaged_ sizeof(__engaged_)
                  ff
0x1FFFFFF8F0:   0x60

(gdb) mc xb this sizeof(*this)
                  00      ff      ff      ff      ff      ff      ff      ff
0x1FFFFFF8E0:   0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
                  ff      ff      ff      ff      ff      ff      ff      ff
0x1FFFFFF8E8:   0x00    0x00    0x00    0x00    0x00    0x00    0x00    0x00
                  ff      ff      ff      ff      ff      ff      ff      ff
0x1FFFFFF8F0:   0x60    0xf9    0xff    0xff    0x1f    0x00    0x00    0x00


type = struct std::__1::__optional_destruct_base<dummy, false> [with _Tp =
dummy] {
    union {
        char __null_state_;
        value_type __val_;
    };
    bool __engaged_;
  public:
    ~__optional_destruct_base(void);
    __optional_destruct_base(void);
    void reset(void);

    typedef _Tp value_type;
}

'this' points to memory on the stack which is why it's safe to dereference.

I'm not familiar with the code, but as I understand it, this is the key
function:

static Bool stmt_is_guardable ( const IRStmt* st )
{
   switch (st->tag) {
      // These are easily guarded.
      case Ist_NoOp:
      case Ist_IMark:
      case Ist_Put:
      case Ist_PutI:
         return True;
      // These are definitely not guardable, or at least it's way too much
      // hassle to do so.
      case Ist_CAS:
      case Ist_LLSC:
      case Ist_MBE:
         return False;
      // These could be guarded, with some effort, if really needed, but
      // currently aren't guardable.
      case Ist_LoadG:
      case Ist_Store:
      case Ist_StoreG:
      case Ist_Exit:
      case Ist_Dirty:
         return False;
      // This is probably guardable, but it depends on the RHS of the
      // assignment.
      case Ist_WrTmp:
         return expr_is_guardable(st->Ist.WrTmp.data);
      default:
         vex_printf("\n"); ppIRStmt(st); vex_printf("\n");
         vpanic("stmt_is_guardable: unhandled stmt");
   }
}

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to