* [PATCH] [gdb] Improve selftest c_ctrl_unctrl
@ 2026-03-26 14:04 Tom de Vries
2026-04-10 12:32 ` [PING][PATCH] " Tom de Vries
0 siblings, 1 reply; 3+ messages in thread
From: Tom de Vries @ 2026-03-26 14:04 UTC (permalink / raw)
To: gdb-patches
Improve selftest c_ctrl_unctrl by exercising all valid inputs of c_iscntrl.
Tested on x86_64-linux.
Suggested-By: Tom Tromey <tom@tromey.com> [1]
[1] https://sourceware.org/pipermail/gdb-patches/2026-March/226231.html
---
gdb/utils.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/gdb/utils.c b/gdb/utils.c
index b073bb9fdf3..c8903896081 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -3793,12 +3793,30 @@ test_c_ctrl_unctrl ()
SELF_CHECK (c_ctrl ('?') == 0x7f);
SELF_CHECK (c_unctrl (0x7f) == '?');
- /* Consistency check. */
- for (unsigned int i = 0; i < 0x100; i++)
+ /* Consistency check.
+
+ The ctype.h function iscntrl has an int parameter, and defined behavior
+ for inputs [0, 255] and EOF. Consequently, iscntrl has undefined
+ behavior when called with a negative signed char argument (with the
+ possible exception of EOF, which is a negative int constant). That
+ extends to chars on platforms where char == signed char. Consequently,
+ to write portable code, iscntrl char and signed char arguments need to be
+ cast to unsigned char.
+
+ The c-ctype.h variant c_iscntrl sidesteps this problem by having defined
+ behavior for inputs [-128, 255] and not bothering about EOF.
+
+ The functions c_ctrl/c_unctrl sidestep this issue by using parameter
+ type unsigned char instead of int.
+
+ So, testing input values [0..255] tests all relevant behavior of
+ c_ctrl/c_unctrl. However, we designed these functions to be compatible
+ with c_iscntrl, so we test for all valid inputs of that function. */
+ for (int i = -128; i < 256; i++)
{
unsigned char ch = i;
unsigned char unctrl_ch = c_unctrl (ch);
- if (!c_iscntrl (ch))
+ if (!c_iscntrl (i))
{
SELF_CHECK (unctrl_ch == ch);
continue;
base-commit: edf0ae3b9f1ca23daaa55628683edc9a3360286f
--
2.51.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PING][PATCH] [gdb] Improve selftest c_ctrl_unctrl
2026-03-26 14:04 [PATCH] [gdb] Improve selftest c_ctrl_unctrl Tom de Vries
@ 2026-04-10 12:32 ` Tom de Vries
2026-04-24 13:16 ` Tom de Vries
0 siblings, 1 reply; 3+ messages in thread
From: Tom de Vries @ 2026-04-10 12:32 UTC (permalink / raw)
To: gdb-patches
On 3/26/26 3:04 PM, Tom de Vries wrote:
> Improve selftest c_ctrl_unctrl by exercising all valid inputs of c_iscntrl.
>
Ping.
Thanks,
- Tom
> Tested on x86_64-linux.
>
> Suggested-By: Tom Tromey <tom@tromey.com> [1]
>
> [1] https://sourceware.org/pipermail/gdb-patches/2026-March/226231.html
> ---
> gdb/utils.c | 24 +++++++++++++++++++++---
> 1 file changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/utils.c b/gdb/utils.c
> index b073bb9fdf3..c8903896081 100644
> --- a/gdb/utils.c
> +++ b/gdb/utils.c
> @@ -3793,12 +3793,30 @@ test_c_ctrl_unctrl ()
> SELF_CHECK (c_ctrl ('?') == 0x7f);
> SELF_CHECK (c_unctrl (0x7f) == '?');
>
> - /* Consistency check. */
> - for (unsigned int i = 0; i < 0x100; i++)
> + /* Consistency check.
> +
> + The ctype.h function iscntrl has an int parameter, and defined behavior
> + for inputs [0, 255] and EOF. Consequently, iscntrl has undefined
> + behavior when called with a negative signed char argument (with the
> + possible exception of EOF, which is a negative int constant). That
> + extends to chars on platforms where char == signed char. Consequently,
> + to write portable code, iscntrl char and signed char arguments need to be
> + cast to unsigned char.
> +
> + The c-ctype.h variant c_iscntrl sidesteps this problem by having defined
> + behavior for inputs [-128, 255] and not bothering about EOF.
> +
> + The functions c_ctrl/c_unctrl sidestep this issue by using parameter
> + type unsigned char instead of int.
> +
> + So, testing input values [0..255] tests all relevant behavior of
> + c_ctrl/c_unctrl. However, we designed these functions to be compatible
> + with c_iscntrl, so we test for all valid inputs of that function. */
> + for (int i = -128; i < 256; i++)
> {
> unsigned char ch = i;
> unsigned char unctrl_ch = c_unctrl (ch);
> - if (!c_iscntrl (ch))
> + if (!c_iscntrl (i))
> {
> SELF_CHECK (unctrl_ch == ch);
> continue;
>
> base-commit: edf0ae3b9f1ca23daaa55628683edc9a3360286f
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PING][PATCH] [gdb] Improve selftest c_ctrl_unctrl
2026-04-10 12:32 ` [PING][PATCH] " Tom de Vries
@ 2026-04-24 13:16 ` Tom de Vries
0 siblings, 0 replies; 3+ messages in thread
From: Tom de Vries @ 2026-04-24 13:16 UTC (permalink / raw)
To: gdb-patches
On 4/10/26 2:32 PM, Tom de Vries wrote:
> On 3/26/26 3:04 PM, Tom de Vries wrote:
>> Improve selftest c_ctrl_unctrl by exercising all valid inputs of
>> c_iscntrl.
>>
>
> Ping.
>
I've pushed this.
Thanks,
- Tom
> Thanks,
> - Tom
>
>> Tested on x86_64-linux.
>>
>> Suggested-By: Tom Tromey <tom@tromey.com> [1]
>>
>> [1] https://sourceware.org/pipermail/gdb-patches/2026-March/226231.html
>> ---
>> gdb/utils.c | 24 +++++++++++++++++++++---
>> 1 file changed, 21 insertions(+), 3 deletions(-)
>>
>> diff --git a/gdb/utils.c b/gdb/utils.c
>> index b073bb9fdf3..c8903896081 100644
>> --- a/gdb/utils.c
>> +++ b/gdb/utils.c
>> @@ -3793,12 +3793,30 @@ test_c_ctrl_unctrl ()
>> SELF_CHECK (c_ctrl ('?') == 0x7f);
>> SELF_CHECK (c_unctrl (0x7f) == '?');
>> - /* Consistency check. */
>> - for (unsigned int i = 0; i < 0x100; i++)
>> + /* Consistency check.
>> +
>> + The ctype.h function iscntrl has an int parameter, and defined
>> behavior
>> + for inputs [0, 255] and EOF. Consequently, iscntrl has undefined
>> + behavior when called with a negative signed char argument (with the
>> + possible exception of EOF, which is a negative int constant). That
>> + extends to chars on platforms where char == signed char.
>> Consequently,
>> + to write portable code, iscntrl char and signed char arguments
>> need to be
>> + cast to unsigned char.
>> +
>> + The c-ctype.h variant c_iscntrl sidesteps this problem by having
>> defined
>> + behavior for inputs [-128, 255] and not bothering about EOF.
>> +
>> + The functions c_ctrl/c_unctrl sidestep this issue by using
>> parameter
>> + type unsigned char instead of int.
>> +
>> + So, testing input values [0..255] tests all relevant behavior of
>> + c_ctrl/c_unctrl. However, we designed these functions to be
>> compatible
>> + with c_iscntrl, so we test for all valid inputs of that
>> function. */
>> + for (int i = -128; i < 256; i++)
>> {
>> unsigned char ch = i;
>> unsigned char unctrl_ch = c_unctrl (ch);
>> - if (!c_iscntrl (ch))
>> + if (!c_iscntrl (i))
>> {
>> SELF_CHECK (unctrl_ch == ch);
>> continue;
>>
>> base-commit: edf0ae3b9f1ca23daaa55628683edc9a3360286f
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-24 13:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-26 14:04 [PATCH] [gdb] Improve selftest c_ctrl_unctrl Tom de Vries
2026-04-10 12:32 ` [PING][PATCH] " Tom de Vries
2026-04-24 13:16 ` Tom de Vries
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox