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

Reply via email to