fjpanag commented on code in PR #7285: URL: https://github.com/apache/incubator-nuttx/pull/7285#discussion_r993274928
########## mm/ubsan/ubsan.c: ########## @@ -160,7 +160,7 @@ static int64_t get_signed_val(FAR struct type_descriptor *type, unsigned extra_bits = sizeof(int64_t) * 8 - type_bit_width(type); uintptr_t ulong_val = (uintptr_t)val; - return ((int64_t)ulong_val) << extra_bits >> extra_bits; + return (int64_t)(ulong_val << extra_bits >> extra_bits); Review Comment: > Maybe it is better to keep code here as is and change is_inline_int to return bits < inline_bits; and not equal, so equal condition will be evaluated by return *(FAR int64_t *)val; in get_signed_val? I don't see how this is going to help. In my case the `type_bit_width()` is 32 so the same code will be executed nevertheless. But I don't understand, why do we need to clear the "extra_bits" in the first place? Here are some real values: Actual value is -1. extra_bits = 32 val, ulong_val = 0xffffffffffffffff So, this should return 0xffffffffffffffff as an int64_t, right? Why clear any bits? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org