[PATCH 4/6] libc/stdlib: Undefined shift negative value in a64l

Keith Packard via Newlib <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Shifting a negative value is not defined. Use an unsigned
value with the same bit pattern instead.

Signed-off-by: Keith Packard <[email protected]>
---
 newlib/libc/stdlib/a64l.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/newlib/libc/stdlib/a64l.c b/newlib/libc/stdlib/a64l.c
index dcac2e050..a8b1b6e45 100644
--- a/newlib/libc/stdlib/a64l.c
+++ b/newlib/libc/stdlib/a64l.c
@@ -177,7 +177,7 @@ a64l (const char *input)
 #if LONG_MAX > 2147483647
   /* for implementations where long is > 32 bits, the result must be sign-extended */
   if (result & 0x80000000)
-      return (((long)-1 >> 32) << 32) + result;
+      return (~0UL << 32) + result;
 #endif
 
   return result;
-- 
2.28.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.