Module Name: src
Committed By: riastradh
Date: Tue Oct 8 13:42:17 UTC 2024
Modified Files:
src/lib/libc/locale: c16rtomb.c c8rtomb.c
Log Message:
c16rtomb, c8rtomb: Omit needless casts. Mark remaining lint issues.
These casts were introduced to pacify lint. lint has now been fixed
to handle __SHIFTOUT/__BITS more robustly so some of them are no
longer needed to pacify lint.
But lint still objects without some semantically unnecessary casts --
mark those.
- In c8rtomb, c32 is guaranteed to be at most 24-bit -- actually, at
most 21-bit -- but I'm not sure how to prove this to lint without a
transitive analysis of the state machine transitions and knowledge
of the only allowed initial state.
- In c16rtomb, the shiftouts are always 9-bit and so the shiftin
should never overflow, but lint hasn't figured this out yet.
PR standards/58601: uchar.h C23 compliance: char8_t, mbrtoc8, c8rtomb
PR toolchain/58728: __SHIFTIN/__BITS of values in known-limited range
without cast
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/locale/c16rtomb.c
cvs rdiff -u -r1.6 -r1.7 src/lib/libc/locale/c8rtomb.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/locale/c16rtomb.c
diff -u src/lib/libc/locale/c16rtomb.c:1.7 src/lib/libc/locale/c16rtomb.c:1.8
--- src/lib/libc/locale/c16rtomb.c:1.7 Wed Aug 21 18:36:11 2024
+++ src/lib/libc/locale/c16rtomb.c Tue Oct 8 13:42:17 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: c16rtomb.c,v 1.7 2024/08/21 18:36:11 rillig Exp $ */
+/* $NetBSD: c16rtomb.c,v 1.8 2024/10/08 13:42:17 riastradh Exp $ */
/*-
* Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: c16rtomb.c,v 1.7 2024/08/21 18:36:11 rillig Exp $");
+__RCSID("$NetBSD: c16rtomb.c,v 1.8 2024/10/08 13:42:17 riastradh Exp $");
#include "namespace.h"
@@ -177,6 +177,11 @@ c16rtomb_l(char *restrict s, char16_t c1
}
const char16_t w1 = S->surrogate;
const char16_t w2 = c16;
+ /*
+ * XXX lint is unconvinced that this cast is needless:
+ * PR toolchain/58728: __SHIFTIN/__BITS of values in
+ * known-limited range without cast
+ */
c32 = (char32_t)(
__SHIFTIN(__SHIFTOUT(w1, __BITS(9,0)), __BITS(19,10)) |
__SHIFTIN(__SHIFTOUT(w2, __BITS(9,0)), __BITS(9,0)));
Index: src/lib/libc/locale/c8rtomb.c
diff -u src/lib/libc/locale/c8rtomb.c:1.6 src/lib/libc/locale/c8rtomb.c:1.7
--- src/lib/libc/locale/c8rtomb.c:1.6 Sun Aug 18 12:41:38 2024
+++ src/lib/libc/locale/c8rtomb.c Tue Oct 8 13:42:17 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: c8rtomb.c,v 1.6 2024/08/18 12:41:38 riastradh Exp $ */
+/* $NetBSD: c8rtomb.c,v 1.7 2024/10/08 13:42:17 riastradh Exp $ */
/*-
* Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: c8rtomb.c,v 1.6 2024/08/18 12:41:38 riastradh Exp $");
+__RCSID("$NetBSD: c8rtomb.c,v 1.7 2024/10/08 13:42:17 riastradh Exp $");
#include "namespace.h"
@@ -193,8 +193,8 @@ c8rtomb_l(char *restrict s, char8_t c8,
* Get the current state and buffer.
*/
__CTASSERT(UTF8_ACCEPT == 0); /* initial conversion state */
- state = (utf8_state_t)__SHIFTOUT(S->state_c32, __BITS(31,24));
- c32 = (char32_t)__SHIFTOUT(S->state_c32, __BITS(23,0));
+ state = __SHIFTOUT(S->state_c32, __BITS(31,24));
+ c32 = __SHIFTOUT(S->state_c32, __BITS(23,0));
/*
* Feed the byte into the state machine to update the state.
@@ -211,6 +211,11 @@ c8rtomb_l(char *restrict s, char8_t c8,
/*
* Valid UTF-8 so far but incomplete. Update state and
* output nothing.
+ *
+ * XXX lint is unconvinced that this cast is needless.
+ * Related to (but perhaps not addressed by solving):
+ * PR toolchain/58728: __SHIFTIN/__BITS of values in
+ * known-limited range without cast
*/
S->state_c32 = (char32_t)(
__SHIFTIN(state, __BITS(31,24)) |