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