Module Name:    src
Committed By:   rillig
Date:           Sun Dec 15 07:43:53 UTC 2024

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_222.c

Log Message:
tests/lint: test negative constant and unsigned type for all operators


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/msg_222.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/msg_222.c
diff -u src/tests/usr.bin/xlint/lint1/msg_222.c:1.7 src/tests/usr.bin/xlint/lint1/msg_222.c:1.8
--- src/tests/usr.bin/xlint/lint1/msg_222.c:1.7	Sun Dec 15 05:56:18 2024
+++ src/tests/usr.bin/xlint/lint1/msg_222.c	Sun Dec 15 07:43:53 2024
@@ -1,43 +1,105 @@
-/*	$NetBSD: msg_222.c,v 1.7 2024/12/15 05:56:18 rillig Exp $	*/
+/*	$NetBSD: msg_222.c,v 1.8 2024/12/15 07:43:53 rillig Exp $	*/
 # 3 "msg_222.c"
 
 // Test for message: conversion of negative constant %lld to unsigned type '%s' [222]
+//
+// See also:
+//	msg_162.c: comparison of unsigned type with negative constant
+//	msg_164.c: assignment of negative constant to unsigned type
+//	msg_221.c: initialization of unsigned type with negative constant
+//	msg_296.c: conversion of negative constant to unsigned type in call
 
 /* lint1-extra-flags: -X 351 */
 
-/* expect+1: warning: initialization of unsigned type 'unsigned int' with negative constant -1 [221] */
-unsigned int global = -1;
+unsigned int u32;
+signed char sc;
+unsigned char uc;
+_Bool b;
 
-void take_unsigned_int(unsigned int);
 
 void
-function(signed char *scp, unsigned char *ucp)
+convert_negative_constant(void)
 {
-	/* expect+1: warning: initialization of unsigned type 'unsigned int' with negative constant -1 [221] */
-	unsigned int local = -1;
-
-	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int', arg #1 [296] */
-	take_unsigned_int(-1);
-
-	if (local & -1)
-		return;
+	u32 = !-8;
+	u32 = ~-8;
+	/* expect+1: warning: assignment of negative constant -8 to unsigned type 'unsigned int' [164] */
+	u32 = +-8;
+	u32 = - -8;
+
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = u32 * -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = -8 * u32;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = u32 / -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = -8 / u32;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = u32 % -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = -8 / u32;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = u32 + -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = -8 + u32;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = u32 - -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 = -8 - u32;
+	/* expect+1: warning: negative shift [121] */
+	u32 = u32 << -8;
+	u32 = -8 << u32;
+	/* expect+1: warning: negative shift [121] */
+	u32 = u32 >> -8;
+	u32 = -8 >> u32;
 
 	/* expect+1: warning: operator '<' compares 'unsigned int' with 'negative constant' [162] */
-	if (local < -1)
-		return;
-
-	local &= -1;
-
-	/* expect+1: warning: conversion of negative constant -1 to unsigned type 'unsigned int' [222] */
-	local += -1;
+	b = u32 < -8;
+	/* expect+1: warning: operator '<=' compares 'unsigned int' with 'negative constant' [162] */
+	b = u32 <= -8;
+	/* expect+1: warning: operator '>' compares 'unsigned int' with 'negative constant' [162] */
+	b = u32 > -8;
+	/* expect+1: warning: operator '>=' compares 'unsigned int' with 'negative constant' [162] */
+	b = u32 >= -8;
+	/* expect+1: warning: operator '==' compares 'unsigned int' with 'negative constant' [162] */
+	b = u32 == -8;
+	/* expect+1: warning: operator '!=' compares 'unsigned int' with 'negative constant' [162] */
+	b = u32 != -8;
+
+	u32 = u32 & -8;
+	u32 = u32 ^ -8;
+	u32 = u32 | -8;
+	b = u32 && -8;
+	b = u32 || -8;
+
+	/* expect+1: warning: assignment of negative constant -8 to unsigned type 'unsigned int' [164] */
+	u32 = -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 *= -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 /= -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 %= -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 += -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 -= -8;
+	// XXX: missing 'negative shift' warning
+	u32 <<= -8;
+	// XXX: missing 'negative shift' warning
+	u32 >>= -8;
+	u32 &= -8;
+	/* expect+1: warning: conversion of negative constant -8 to unsigned type 'unsigned int' [222] */
+	u32 ^= -8;
+	u32 |= -8;
 
-	*scp += 'A' - 'a';
-	*scp -= 'A' - 'a';
+	sc += 'A' - 'a';
+	sc -= 'A' - 'a';
 
 	// XXX: It's perfectly fine to effectively subtract a constant from
 	// XXX: an unsigned type.
 	/* expect+1: warning: conversion of negative constant -32 to unsigned type 'unsigned char' [222] */
-	*ucp += 'A' - 'a';
+	uc += 'A' - 'a';
 	/* expect+1: warning: conversion of negative constant -32 to unsigned type 'unsigned char' [222] */
-	*ucp -= 'A' - 'a';
+	uc -= 'A' - 'a';
 }

Reply via email to