Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/usr.bin/xlint/lint1 tests/lint: demonstrate unintended...



details:   https://anonhg.NetBSD.org/src/rev/148fa404cdde
branches:  trunk
changeset: 1023305:148fa404cdde
user:      rillig <rillig%NetBSD.org@localhost>
date:      Thu Sep 02 17:26:43 2021 +0000

description:
tests/lint: demonstrate unintended prototype warning for signed char

diffstat:

 tests/usr.bin/xlint/lint1/msg_259.c   |  74 ++++++++++++++++++++++++++++++++++-
 tests/usr.bin/xlint/lint1/msg_259.exp |  50 ++++++++++++-----------
 2 files changed, 99 insertions(+), 25 deletions(-)

diffs (149 lines):

diff -r 75b85d73235b -r 148fa404cdde tests/usr.bin/xlint/lint1/msg_259.c
--- a/tests/usr.bin/xlint/lint1/msg_259.c       Thu Sep 02 16:31:01 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_259.c       Thu Sep 02 17:26:43 2021 +0000
@@ -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 @@
 }
 
 /*
+ * 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
diff -r 75b85d73235b -r 148fa404cdde tests/usr.bin/xlint/lint1/msg_259.exp
--- a/tests/usr.bin/xlint/lint1/msg_259.exp     Thu Sep 02 16:31:01 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_259.exp     Thu Sep 02 17:26:43 2021 +0000
@@ -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]



Home | Main Index | Thread Index | Old Index