msg_259.c revision 1.15 1 1.15 rillig /* $NetBSD: msg_259.c,v 1.15 2021/08/31 18:59:26 rillig Exp $ */
2 1.1 rillig # 3 "msg_259.c"
3 1.1 rillig
4 1.6 rillig // Test for message: argument #%d is converted from '%s' to '%s' due to prototype [259]
5 1.1 rillig
6 1.11 rillig /* lint1-only-if: lp64 */
7 1.2 rillig /* lint1-extra-flags: -h */
8 1.2 rillig
9 1.14 rillig void plain_char(char);
10 1.14 rillig void signed_int(int);
11 1.14 rillig void unsigned_int(unsigned int);
12 1.14 rillig void signed_long(long);
13 1.14 rillig void unsigned_long(unsigned long);
14 1.14 rillig void signed_long_long(long long);
15 1.14 rillig void unsigned_long_long(unsigned long long);
16 1.2 rillig
17 1.2 rillig void
18 1.14 rillig change_in_type_width(char c, int i, long l)
19 1.2 rillig {
20 1.14 rillig plain_char(c);
21 1.14 rillig signed_int(c);
22 1.9 rillig /* No warning 259 on LP64, only on ILP32 */
23 1.14 rillig signed_long(c);
24 1.9 rillig
25 1.14 rillig plain_char(i); /* XXX: why no warning? */
26 1.14 rillig signed_int(i);
27 1.9 rillig /* No warning 259 on LP64, only on ILP32 */
28 1.14 rillig signed_long(i);
29 1.9 rillig
30 1.14 rillig plain_char(l); /* XXX: why no warning? */
31 1.9 rillig /* expect+1: from 'long' to 'int' due to prototype [259] */
32 1.14 rillig signed_int(l);
33 1.14 rillig signed_long(l);
34 1.2 rillig }
35 1.10 rillig
36 1.10 rillig /*
37 1.10 rillig * Converting a signed integer type to its corresponding unsigned integer
38 1.14 rillig * type (C99 6.2.5p6) is usually not a problem since the actual values of the
39 1.14 rillig * expressions are usually not anywhere near the maximum signed value. From
40 1.14 rillig * a technical standpoint, it is correct to warn here since even small
41 1.14 rillig * negative numbers may result in very large positive numbers.
42 1.14 rillig *
43 1.14 rillig * A common case where it occurs is when the difference of two pointers is
44 1.14 rillig * converted to size_t. The type ptrdiff_t is defined to be signed, but in
45 1.14 rillig * many practical cases, the expression is '(end - start)', which makes the
46 1.14 rillig * resulting value necessarily positive.
47 1.10 rillig */
48 1.10 rillig void
49 1.14 rillig signed_to_unsigned(int si, long sl, long long sll)
50 1.10 rillig {
51 1.10 rillig /* expect+1: warning: argument #1 is converted from 'int' to 'unsigned int' due to prototype [259] */
52 1.14 rillig unsigned_int(si);
53 1.10 rillig
54 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long' to 'unsigned int' due to prototype [259] */
55 1.14 rillig unsigned_int(sl);
56 1.10 rillig
57 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long long' to 'unsigned int' due to prototype [259] */
58 1.14 rillig unsigned_int(sll);
59 1.12 rillig
60 1.12 rillig /*
61 1.12 rillig * XXX: Why no warning? Even though 'unsigned long' is 64 bits
62 1.12 rillig * wide, it cannot represent negative 32-bit values.
63 1.12 rillig */
64 1.14 rillig unsigned_long(si);
65 1.14 rillig
66 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long' to 'unsigned long' due to prototype [259] */
67 1.14 rillig unsigned_long(sl);
68 1.15 rillig /* expect+1: warning: argument #1 is converted from 'long long' to 'unsigned long' due to prototype [259] */
69 1.15 rillig unsigned_long(sll);
70 1.12 rillig
71 1.12 rillig /*
72 1.12 rillig * XXX: Why no warning? Even though 'unsigned long long' is 64 bits
73 1.12 rillig * wide, it cannot represent negative 32-bit values.
74 1.12 rillig */
75 1.14 rillig unsigned_long_long(si);
76 1.12 rillig
77 1.12 rillig /* expect+1: warning: argument #1 is converted from 'long' to 'unsigned long long' due to prototype [259] */
78 1.14 rillig unsigned_long_long(sl);
79 1.14 rillig
80 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long long' to 'unsigned long long' due to prototype [259] */
81 1.14 rillig unsigned_long_long(sll);
82 1.14 rillig }
83 1.14 rillig
84 1.14 rillig void
85 1.14 rillig unsigned_to_signed(unsigned int ui, unsigned long ul, unsigned long long ull)
86 1.14 rillig {
87 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned int' to 'int' due to prototype [259] */
88 1.14 rillig signed_int(ui);
89 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'int' due to prototype [259] */
90 1.14 rillig signed_int(ul);
91 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'int' due to prototype [259] */
92 1.14 rillig signed_int(ull);
93 1.14 rillig signed_long(ui);
94 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'long' due to prototype [259] */
95 1.14 rillig signed_long(ul);
96 1.15 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'long' due to prototype [259] */
97 1.15 rillig signed_long(ull);
98 1.14 rillig signed_long_long(ui);
99 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'long long' due to prototype [259] */
100 1.14 rillig signed_long_long(ul);
101 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'long long' due to prototype [259] */
102 1.14 rillig signed_long_long(ull);
103 1.14 rillig }
104 1.14 rillig
105 1.14 rillig void
106 1.14 rillig signed_to_signed(signed int si, signed long sl, signed long long sll)
107 1.14 rillig {
108 1.14 rillig signed_int(si);
109 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long' to 'int' due to prototype [259] */
110 1.14 rillig signed_int(sl);
111 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long long' to 'int' due to prototype [259] */
112 1.14 rillig signed_int(sll);
113 1.14 rillig signed_long(si);
114 1.14 rillig signed_long(sl);
115 1.15 rillig /* expect+1: warning: argument #1 is converted from 'long long' to 'long' due to prototype [259] */
116 1.15 rillig signed_long(sll);
117 1.14 rillig signed_long_long(si);
118 1.14 rillig /* expect+1: warning: argument #1 is converted from 'long' to 'long long' due to prototype [259] */
119 1.14 rillig signed_long_long(sl);
120 1.14 rillig signed_long_long(sll);
121 1.14 rillig }
122 1.14 rillig
123 1.14 rillig void
124 1.14 rillig unsigned_to_unsigned(unsigned int ui, unsigned long ul, unsigned long long ull)
125 1.14 rillig {
126 1.14 rillig unsigned_int(ui);
127 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259] */
128 1.14 rillig unsigned_int(ul);
129 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'unsigned int' due to prototype [259] */
130 1.14 rillig unsigned_int(ull);
131 1.14 rillig unsigned_long(ui);
132 1.14 rillig unsigned_long(ul);
133 1.15 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long long' to 'unsigned long' due to prototype [259] */
134 1.15 rillig unsigned_long(ull);
135 1.14 rillig unsigned_long_long(ui);
136 1.14 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'unsigned long long' due to prototype [259] */
137 1.14 rillig unsigned_long_long(ul);
138 1.14 rillig unsigned_long_long(ull);
139 1.10 rillig }
140 1.13 rillig
141 1.13 rillig void
142 1.13 rillig pass_sizeof_as_smaller_type(void)
143 1.13 rillig {
144 1.13 rillig /*
145 1.13 rillig * XXX: Even though the expression has type size_t, it has a constant
146 1.13 rillig * value that fits effortless into an 'unsigned int', it's so small
147 1.15 rillig * that it would even fit into a 3-bit bit-field, so lint should not
148 1.15 rillig * warn here.
149 1.13 rillig */
150 1.13 rillig /* expect+1: warning: argument #1 is converted from 'unsigned long' to 'unsigned int' due to prototype [259] */
151 1.14 rillig unsigned_int(sizeof(int));
152 1.13 rillig }
153