[PATCH] Make the UNALIGNED_X_Y() macro more robust against errors.

Jan Dubiec jdx@o2.pl
Sun Aug 9 21:10:00 GMT 2026


On 23.07.2026 13:33, Torbjorn SVENSSON wrote:
> On 2026-07-22 01:48, Jan Dubiec wrote:[...]>>   /* Nonzero if either X or Y is not aligned on a "long" boundary.  */
>>   #define UNALIGNED_X_Y(X, Y) \
>> -  (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1)))
>> +  (((long)(intptr_t)X & (sizeof (long) - 1)) | \
>> +   ((long)(intptr_t)Y & (sizeof (long) - 1)))
> 
> Not really what you change, but ideally, shouldn't this be:
> 
> +  (((long)(intptr_t)(X) & (sizeof (long) - 1)) | \
> +   ((long)(intptr_t)(Y) & (sizeof (long) - 1)))
> 
> i.e. putting parenthesis around the macro arguments?

I totally agree. Thanks!

/J.D.


Signed-off-by: Jan Dubiec <jdx@o2.pl>
---
 newlib/libc/string/local.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/newlib/libc/string/local.h b/newlib/libc/string/local.h
index 94c7c4a8f..d9bff40ab 100644
--- a/newlib/libc/string/local.h
+++ b/newlib/libc/string/local.h
@@ -31,8 +31,8 @@ int __wcwidth (wint_t);
 #else /* _HAVE_HW_MISALIGNED_ACCESS */
 /* Nonzero if either X or Y is not aligned on a "long" boundary.  */
 #define UNALIGNED_X_Y(X, Y) \
-  (((long)(intptr_t)X & (sizeof (long) - 1)) | \
-   ((long)(intptr_t)Y & (sizeof (long) - 1)))
+  (((long)(intptr_t)(X) & (sizeof (long) - 1)) | \
+   ((long)(intptr_t)(Y) & (sizeof (long) - 1)))
 #endif /* _HAVE_HW_MISALIGNED_ACCESS */
 
 /* How many bytes are copied each iteration of the word copy loop.  */
-- 
2.55.0


More information about the Newlib mailing list