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