msg_132_ilp32.c revision 1.5 1 1.5 rillig /* $NetBSD: msg_132_ilp32.c,v 1.5 2023/08/08 20:15:11 rillig Exp $ */
2 1.1 rillig # 3 "msg_132_ilp32.c"
3 1.1 rillig
4 1.1 rillig // Test for message: conversion from '%s' to '%s' may lose accuracy [132]
5 1.1 rillig
6 1.1 rillig /*
7 1.1 rillig * On 32-bit platforms, it is possible to add a 64-bit integer to a 32-bit
8 1.1 rillig * pointer. The 64-bit integer is then converted to the ptrdiff_t of the
9 1.1 rillig * target platform, which results in the non-obvious conversion from
10 1.1 rillig * 'long long' to either 'long' or 'int', depending on the platform's
11 1.1 rillig * ptrdiff_t.
12 1.1 rillig */
13 1.1 rillig
14 1.1 rillig /* lint1-only-if: ilp32 int */
15 1.3 rillig /* lint1-extra-flags: -a -X 351 */
16 1.1 rillig
17 1.1 rillig /*
18 1.1 rillig * Seen in usr.bin/make/var.c, function RegexReplace, in the function call
19 1.1 rillig * SepBuf_AddBytesBetween(buf, wp + m[0].rm_so, wp + m[0].rm_eo). The
20 1.1 rillig * offsets of regular expression matches have type off_t, which is a 64-bit
21 1.1 rillig * integer.
22 1.1 rillig *
23 1.1 rillig * C11 6.5.6p8 does not explicitly define the meaning of a pointer + an
24 1.1 rillig * overly long integer, it just says "undefined behavior" if the resulting
25 1.1 rillig * pointer would be outside the object.
26 1.1 rillig */
27 1.1 rillig const char *
28 1.1 rillig array_subscript(const char *p, long long idx)
29 1.1 rillig {
30 1.1 rillig /* expect+1: warning: conversion from 'long long' to 'int' may lose accuracy [132] */
31 1.1 rillig return p + idx;
32 1.1 rillig }
33 1.2 rillig
34 1.2 rillig /*
35 1.2 rillig * On ILP32 platforms, pointer, long and int have the same size, so there is
36 1.2 rillig * no loss of accuracy.
37 1.2 rillig */
38 1.2 rillig unsigned int
39 1.2 rillig convert_pointer_to_smaller_integer(void *ptr)
40 1.2 rillig {
41 1.2 rillig return (unsigned long)(ptr) >> 12;
42 1.2 rillig }
43 1.4 rillig
44 1.4 rillig _Bool bool_var;
45 1.4 rillig char char_var;
46 1.4 rillig signed char schar_var;
47 1.4 rillig unsigned char uchar_var;
48 1.4 rillig short short_var;
49 1.4 rillig unsigned short ushort_var;
50 1.4 rillig int int_var;
51 1.4 rillig unsigned int uint_var;
52 1.4 rillig long long_var;
53 1.4 rillig unsigned long ulong_var;
54 1.4 rillig long long llong_var;
55 1.4 rillig unsigned long long ullong_var;
56 1.4 rillig
57 1.4 rillig void
58 1.4 rillig convert_all(void)
59 1.4 rillig {
60 1.4 rillig bool_var = bool_var;
61 1.4 rillig bool_var = char_var;
62 1.4 rillig bool_var = schar_var;
63 1.4 rillig bool_var = uchar_var;
64 1.4 rillig bool_var = short_var;
65 1.4 rillig bool_var = ushort_var;
66 1.4 rillig bool_var = int_var;
67 1.4 rillig bool_var = uint_var;
68 1.4 rillig bool_var = long_var;
69 1.4 rillig bool_var = ulong_var;
70 1.4 rillig bool_var = llong_var;
71 1.4 rillig bool_var = ullong_var;
72 1.4 rillig
73 1.4 rillig char_var = bool_var;
74 1.4 rillig char_var = char_var;
75 1.4 rillig char_var = schar_var;
76 1.4 rillig char_var = uchar_var;
77 1.4 rillig char_var = short_var;
78 1.4 rillig char_var = ushort_var;
79 1.4 rillig char_var = int_var;
80 1.4 rillig char_var = uint_var;
81 1.4 rillig /* expect+1: warning: conversion from 'long' to 'char' may lose accuracy [132] */
82 1.4 rillig char_var = long_var;
83 1.4 rillig /* expect+1: warning: conversion from 'unsigned long' to 'char' may lose accuracy [132] */
84 1.4 rillig char_var = ulong_var;
85 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'char' may lose accuracy [132] */
86 1.4 rillig char_var = llong_var;
87 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'char' may lose accuracy [132] */
88 1.4 rillig char_var = ullong_var;
89 1.4 rillig
90 1.4 rillig schar_var = bool_var;
91 1.4 rillig schar_var = char_var;
92 1.4 rillig schar_var = schar_var;
93 1.4 rillig schar_var = uchar_var;
94 1.4 rillig schar_var = short_var;
95 1.4 rillig schar_var = ushort_var;
96 1.4 rillig schar_var = int_var;
97 1.4 rillig schar_var = uint_var;
98 1.4 rillig /* expect+1: warning: conversion from 'long' to 'signed char' may lose accuracy [132] */
99 1.4 rillig schar_var = long_var;
100 1.4 rillig /* expect+1: warning: conversion from 'unsigned long' to 'signed char' may lose accuracy [132] */
101 1.4 rillig schar_var = ulong_var;
102 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'signed char' may lose accuracy [132] */
103 1.4 rillig schar_var = llong_var;
104 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'signed char' may lose accuracy [132] */
105 1.4 rillig schar_var = ullong_var;
106 1.4 rillig
107 1.4 rillig uchar_var = bool_var;
108 1.4 rillig uchar_var = char_var;
109 1.4 rillig uchar_var = schar_var;
110 1.4 rillig uchar_var = uchar_var;
111 1.4 rillig uchar_var = short_var;
112 1.4 rillig uchar_var = ushort_var;
113 1.4 rillig uchar_var = int_var;
114 1.4 rillig uchar_var = uint_var;
115 1.4 rillig /* expect+1: warning: conversion from 'long' to 'unsigned char' may lose accuracy [132] */
116 1.4 rillig uchar_var = long_var;
117 1.4 rillig /* expect+1: warning: conversion from 'unsigned long' to 'unsigned char' may lose accuracy [132] */
118 1.4 rillig uchar_var = ulong_var;
119 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'unsigned char' may lose accuracy [132] */
120 1.4 rillig uchar_var = llong_var;
121 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned char' may lose accuracy [132] */
122 1.4 rillig uchar_var = ullong_var;
123 1.4 rillig
124 1.4 rillig short_var = bool_var;
125 1.4 rillig short_var = char_var;
126 1.4 rillig short_var = schar_var;
127 1.4 rillig short_var = uchar_var;
128 1.4 rillig short_var = short_var;
129 1.4 rillig short_var = ushort_var;
130 1.4 rillig short_var = int_var;
131 1.4 rillig short_var = uint_var;
132 1.4 rillig /* expect+1: warning: conversion from 'long' to 'short' may lose accuracy [132] */
133 1.4 rillig short_var = long_var;
134 1.4 rillig /* expect+1: warning: conversion from 'unsigned long' to 'short' may lose accuracy [132] */
135 1.4 rillig short_var = ulong_var;
136 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'short' may lose accuracy [132] */
137 1.4 rillig short_var = llong_var;
138 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'short' may lose accuracy [132] */
139 1.4 rillig short_var = ullong_var;
140 1.4 rillig
141 1.4 rillig ushort_var = bool_var;
142 1.4 rillig ushort_var = char_var;
143 1.4 rillig ushort_var = schar_var;
144 1.4 rillig ushort_var = uchar_var;
145 1.4 rillig ushort_var = short_var;
146 1.4 rillig ushort_var = ushort_var;
147 1.4 rillig ushort_var = int_var;
148 1.4 rillig ushort_var = uint_var;
149 1.4 rillig /* expect+1: warning: conversion from 'long' to 'unsigned short' may lose accuracy [132] */
150 1.4 rillig ushort_var = long_var;
151 1.4 rillig /* expect+1: warning: conversion from 'unsigned long' to 'unsigned short' may lose accuracy [132] */
152 1.4 rillig ushort_var = ulong_var;
153 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'unsigned short' may lose accuracy [132] */
154 1.4 rillig ushort_var = llong_var;
155 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned short' may lose accuracy [132] */
156 1.4 rillig ushort_var = ullong_var;
157 1.4 rillig
158 1.4 rillig int_var = bool_var;
159 1.4 rillig int_var = char_var;
160 1.4 rillig int_var = schar_var;
161 1.4 rillig int_var = uchar_var;
162 1.4 rillig int_var = short_var;
163 1.4 rillig int_var = ushort_var;
164 1.4 rillig int_var = int_var;
165 1.4 rillig int_var = uint_var;
166 1.4 rillig int_var = long_var;
167 1.4 rillig int_var = ulong_var;
168 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'int' may lose accuracy [132] */
169 1.4 rillig int_var = llong_var;
170 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'int' may lose accuracy [132] */
171 1.4 rillig int_var = ullong_var;
172 1.4 rillig
173 1.4 rillig uint_var = bool_var;
174 1.4 rillig uint_var = char_var;
175 1.4 rillig uint_var = schar_var;
176 1.4 rillig uint_var = uchar_var;
177 1.4 rillig uint_var = short_var;
178 1.4 rillig uint_var = ushort_var;
179 1.4 rillig uint_var = int_var;
180 1.4 rillig uint_var = uint_var;
181 1.4 rillig uint_var = long_var;
182 1.4 rillig uint_var = ulong_var;
183 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'unsigned int' may lose accuracy [132] */
184 1.4 rillig uint_var = llong_var;
185 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned int' may lose accuracy [132] */
186 1.4 rillig uint_var = ullong_var;
187 1.4 rillig
188 1.4 rillig long_var = bool_var;
189 1.4 rillig long_var = char_var;
190 1.4 rillig long_var = schar_var;
191 1.4 rillig long_var = uchar_var;
192 1.4 rillig long_var = short_var;
193 1.4 rillig long_var = ushort_var;
194 1.4 rillig long_var = int_var;
195 1.4 rillig long_var = uint_var;
196 1.4 rillig long_var = long_var;
197 1.4 rillig long_var = ulong_var;
198 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'long' may lose accuracy [132] */
199 1.4 rillig long_var = llong_var;
200 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'long' may lose accuracy [132] */
201 1.4 rillig long_var = ullong_var;
202 1.4 rillig
203 1.4 rillig ulong_var = bool_var;
204 1.4 rillig ulong_var = char_var;
205 1.4 rillig ulong_var = schar_var;
206 1.4 rillig ulong_var = uchar_var;
207 1.4 rillig ulong_var = short_var;
208 1.4 rillig ulong_var = ushort_var;
209 1.4 rillig ulong_var = int_var;
210 1.4 rillig ulong_var = uint_var;
211 1.4 rillig ulong_var = long_var;
212 1.4 rillig ulong_var = ulong_var;
213 1.4 rillig /* expect+1: warning: conversion from 'long long' to 'unsigned long' may lose accuracy [132] */
214 1.4 rillig ulong_var = llong_var;
215 1.4 rillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned long' may lose accuracy [132] */
216 1.4 rillig ulong_var = ullong_var;
217 1.4 rillig
218 1.4 rillig llong_var = bool_var;
219 1.4 rillig llong_var = char_var;
220 1.4 rillig llong_var = schar_var;
221 1.4 rillig llong_var = uchar_var;
222 1.4 rillig llong_var = short_var;
223 1.4 rillig llong_var = ushort_var;
224 1.4 rillig llong_var = int_var;
225 1.4 rillig llong_var = uint_var;
226 1.4 rillig llong_var = long_var;
227 1.4 rillig llong_var = ulong_var;
228 1.4 rillig llong_var = llong_var;
229 1.4 rillig llong_var = ullong_var;
230 1.4 rillig
231 1.4 rillig ullong_var = bool_var;
232 1.4 rillig ullong_var = char_var;
233 1.4 rillig ullong_var = schar_var;
234 1.4 rillig ullong_var = uchar_var;
235 1.4 rillig ullong_var = short_var;
236 1.4 rillig ullong_var = ushort_var;
237 1.4 rillig ullong_var = int_var;
238 1.4 rillig ullong_var = uint_var;
239 1.4 rillig ullong_var = long_var;
240 1.4 rillig ullong_var = ulong_var;
241 1.4 rillig ullong_var = llong_var;
242 1.4 rillig ullong_var = ullong_var;
243 1.4 rillig }
244