Module Name:    src
Committed By:   rillig
Date:           Thu Sep  2 17:26:43 UTC 2021

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

Log Message:
tests/lint: demonstrate unintended prototype warning for signed char


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/tests/usr.bin/xlint/lint1/msg_259.c
cvs rdiff -u -r1.13 -r1.14 src/tests/usr.bin/xlint/lint1/msg_259.exp

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_259.c
diff -u src/tests/usr.bin/xlint/lint1/msg_259.c:1.16 src/tests/usr.bin/xlint/lint1/msg_259.c:1.17
--- src/tests/usr.bin/xlint/lint1/msg_259.c:1.16	Tue Aug 31 19:26:23 2021
+++ src/tests/usr.bin/xlint/lint1/msg_259.c	Thu Sep  2 17:26:43 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_259.c,v 1.16 2021/08/31 19:26:23 rillig Exp $	*/
+/*	$NetBSD: msg_259.c,v 1.17 2021/09/02 17:26:43 rillig Exp $	*/
 # 3 "msg_259.c"
 
 // Test for message: argument #%d is converted from '%s' to '%s' due to prototype [259]
@@ -12,6 +12,10 @@
 /* lint1-extra-flags: -h */
 
 void plain_char(char);
+void signed_char(signed char);
+void unsigned_char(unsigned char);
+void signed_short(signed short);
+void unsigned_short(unsigned short);
 void signed_int(int);
 void unsigned_int(unsigned int);
 void signed_long(long);
@@ -39,6 +43,74 @@ change_in_type_width(char c, int i, long
 }
 
 /*
+ * The default argument promotions convert any small integer type to at
+ * least 'int', and without function prototypes, it is not possible to
+ * declare a function that has a parameter smaller than int, therefore
+ * these conversions do not produce any warnings.
+ * FIXME: Remove the warnings for 'signed char'.
+ * There are lossless conversions though, but these are covered by warning
+ * 297 instead.
+ */
+void
+small_integer_types(char c, signed char sc, unsigned char uc,
+		    signed short ss, unsigned short us,
+		    signed int si, unsigned int ui,
+		    signed long long sll, unsigned long long ull)
+{
+	plain_char(c);
+	plain_char(sc);
+	plain_char(uc);
+	plain_char(ss);
+	plain_char(us);
+	plain_char(si);
+	plain_char(ui);
+	plain_char(sll);
+	plain_char(ull);
+
+	signed_char(c);
+	signed_char(sc);
+	signed_char(uc);
+	signed_char(ss);
+	signed_char(us);
+	signed_char(si);
+	signed_char(ui);
+	/* expect+1: warning: argument #1 is converted from 'long long' to 'signed char' due to prototype [259] */
+	signed_char(sll);
+	/* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'signed char' due to prototype [259] */
+	signed_char(ull);
+
+	unsigned_char(c);
+	unsigned_char(sc);
+	unsigned_char(uc);
+	unsigned_char(ss);
+	unsigned_char(us);
+	unsigned_char(si);
+	unsigned_char(ui);
+	unsigned_char(sll);
+	unsigned_char(ull);
+
+	signed_short(c);
+	signed_short(sc);
+	signed_short(uc);
+	signed_short(ss);
+	signed_short(us);
+	signed_short(si);
+	signed_short(ui);
+	signed_short(sll);
+	signed_short(ull);
+
+	unsigned_short(c);
+	unsigned_short(sc);
+	unsigned_short(uc);
+	unsigned_short(ss);
+	unsigned_short(us);
+	unsigned_short(si);
+	unsigned_short(ui);
+	unsigned_short(sll);
+	unsigned_short(ull);
+}
+
+/*
  * Converting a signed integer type to its corresponding unsigned integer
  * type (C99 6.2.5p6) is usually not a problem since the actual values of the
  * expressions are usually not anywhere near the maximum signed value.  From

Index: src/tests/usr.bin/xlint/lint1/msg_259.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_259.exp:1.13 src/tests/usr.bin/xlint/lint1/msg_259.exp:1.14
--- src/tests/usr.bin/xlint/lint1/msg_259.exp:1.13	Tue Aug 31 19:26:23 2021
+++ src/tests/usr.bin/xlint/lint1/msg_259.exp	Thu Sep  2 17:26:43 2021
@@ -1,24 +1,26 @@
-msg_259.c(37): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
-msg_259.c(57): warning: argument #1 is converted from 'int' to 'unsigned int' due to prototype [259]
-msg_259.c(60): warning: argument #1 is converted from 'long' to 'unsigned int' due to prototype [259]
-msg_259.c(63): warning: argument #1 is converted from 'long long' to 'unsigned int' due to prototype [259]
-msg_259.c(72): warning: argument #1 is converted from 'long' to 'unsigned long' due to prototype [259]
-msg_259.c(74): warning: argument #1 is converted from 'long long' to 'unsigned long' due to prototype [259]
-msg_259.c(83): warning: argument #1 is converted from 'long' to 'unsigned long long' due to prototype [259]
-msg_259.c(86): warning: argument #1 is converted from 'long long' to 'unsigned long long' due to prototype [259]
-msg_259.c(93): warning: argument #1 is converted from 'unsigned int' to 'int' due to prototype [259]
-msg_259.c(95): warning: argument #1 is converted from 'unsigned long' to 'int' due to prototype [259]
-msg_259.c(97): warning: argument #1 is converted from 'unsigned long long' to 'int' due to prototype [259]
-msg_259.c(100): warning: argument #1 is converted from 'unsigned long' to 'long' due to prototype [259]
-msg_259.c(102): warning: argument #1 is converted from 'unsigned long long' to 'long' due to prototype [259]
-msg_259.c(105): warning: argument #1 is converted from 'unsigned long' to 'long long' due to prototype [259]
-msg_259.c(107): warning: argument #1 is converted from 'unsigned long long' to 'long long' due to prototype [259]
-msg_259.c(115): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
-msg_259.c(117): warning: argument #1 is converted from 'long long' to 'int' due to prototype [259]
-msg_259.c(121): warning: argument #1 is converted from 'long long' to 'long' due to prototype [259]
-msg_259.c(124): warning: argument #1 is converted from 'long' to 'long long' due to prototype [259]
-msg_259.c(133): warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259]
-msg_259.c(135): warning: argument #1 is converted from 'unsigned long long' to 'unsigned int' due to prototype [259]
-msg_259.c(139): warning: argument #1 is converted from 'unsigned long long' to 'unsigned long' due to prototype [259]
-msg_259.c(142): warning: argument #1 is converted from 'unsigned long' to 'unsigned long long' due to prototype [259]
-msg_259.c(156): warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259]
+msg_259.c(41): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
+msg_259.c(78): warning: argument #1 is converted from 'long long' to 'signed char' due to prototype [259]
+msg_259.c(80): warning: argument #1 is converted from 'unsigned long long' to 'signed char' due to prototype [259]
+msg_259.c(129): warning: argument #1 is converted from 'int' to 'unsigned int' due to prototype [259]
+msg_259.c(132): warning: argument #1 is converted from 'long' to 'unsigned int' due to prototype [259]
+msg_259.c(135): warning: argument #1 is converted from 'long long' to 'unsigned int' due to prototype [259]
+msg_259.c(144): warning: argument #1 is converted from 'long' to 'unsigned long' due to prototype [259]
+msg_259.c(146): warning: argument #1 is converted from 'long long' to 'unsigned long' due to prototype [259]
+msg_259.c(155): warning: argument #1 is converted from 'long' to 'unsigned long long' due to prototype [259]
+msg_259.c(158): warning: argument #1 is converted from 'long long' to 'unsigned long long' due to prototype [259]
+msg_259.c(165): warning: argument #1 is converted from 'unsigned int' to 'int' due to prototype [259]
+msg_259.c(167): warning: argument #1 is converted from 'unsigned long' to 'int' due to prototype [259]
+msg_259.c(169): warning: argument #1 is converted from 'unsigned long long' to 'int' due to prototype [259]
+msg_259.c(172): warning: argument #1 is converted from 'unsigned long' to 'long' due to prototype [259]
+msg_259.c(174): warning: argument #1 is converted from 'unsigned long long' to 'long' due to prototype [259]
+msg_259.c(177): warning: argument #1 is converted from 'unsigned long' to 'long long' due to prototype [259]
+msg_259.c(179): warning: argument #1 is converted from 'unsigned long long' to 'long long' due to prototype [259]
+msg_259.c(187): warning: argument #1 is converted from 'long' to 'int' due to prototype [259]
+msg_259.c(189): warning: argument #1 is converted from 'long long' to 'int' due to prototype [259]
+msg_259.c(193): warning: argument #1 is converted from 'long long' to 'long' due to prototype [259]
+msg_259.c(196): warning: argument #1 is converted from 'long' to 'long long' due to prototype [259]
+msg_259.c(205): warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259]
+msg_259.c(207): warning: argument #1 is converted from 'unsigned long long' to 'unsigned int' due to prototype [259]
+msg_259.c(211): warning: argument #1 is converted from 'unsigned long long' to 'unsigned long' due to prototype [259]
+msg_259.c(214): warning: argument #1 is converted from 'unsigned long' to 'unsigned long long' due to prototype [259]
+msg_259.c(228): warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259]

Reply via email to