labath added a comment.

This seems suspicious to me, on a couple of levels. You claim that BOOL is an 
unsigned type, but the apple documentation 
<https://developer.apple.com/documentation/objectivec/bool> says "BOOL is 
explicitly signed so @encode(BOOL) is c rather than C even if -funsigned-char 
is used." Which one is true?  Could this have something to do with the fact 
that the documentation assumes obj-c (which does not have a native `bool` type) 
but in lldb, we use obj-c++ (which, I guess, inherits `bool` from c++) 
everywhere?

If BOOL is unsigned, then it's not clear to me why would 
Scalar::ExtractBitfield be sign-extending anything. OTOH, if it is _signed_, 
then sign-extension seems to be the right behavior.

I think we may have some deeper problems with the handling bitfields whose 
underlying types are 1 byte long. Lldb (I think, correctly) sign-extends all 
signed bitfields, except the signed char one:

  (lldb) p a
  (A) $0 = {
    bool_ = true
    signed_char = '\x01'
    signed_short = -1
    signed_int = -1
    unsigned_char = '\x01'
    unsigned_short = 1
    unsigned_int = 1
  }
  (lldb) p/x a
  (A) $1 = {
    bool_ = 0x01
    signed_char = 0x01
    signed_short = 0x0001
    signed_int = 0x00000001
    unsigned_char = 0x01
    unsigned_short = 0x0001
    unsigned_int = 0x00000001
  }

This patch does not have any impact on this behavior, but the fact that signed 
char comes out as '\x01' seems suspicious. This is what gdb does for the same 
input:

  (gdb) p a
  $1 = {bool_ = true, signed_char = -1 '\377', signed_short = -1, signed_int = 
-1, unsigned_char = 1 '\001', unsigned_short = 1, unsigned_int = 1}
  (gdb) p/x a
  $2 = {bool_ = 0x1, signed_char = 0xff, signed_short = 0xffff, signed_int = 
0xffffffff, unsigned_char = 0x1, unsigned_short = 0x1, unsigned_int = 0x1}

Finally, even though I'm not sure this is the right solution, I am sure that 
`GetValueAsSigned` should get the same fix as `GetValueAsUnsigned`


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93421/new/

https://reviews.llvm.org/D93421

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to