Home | History | Annotate | Line # | Download | only in lint1
msg_132_ilp32.c revision 1.4
      1  1.4  rillig /*	$NetBSD: msg_132_ilp32.c,v 1.4 2023/08/08 19:57:23 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 	/* expect+1: warning: conversion from 'int' to 'char' may lose accuracy [132] */
     80  1.4  rillig 	char_var = int_var;
     81  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned int' to 'char' may lose accuracy [132] */
     82  1.4  rillig 	char_var = uint_var;
     83  1.4  rillig 	/* expect+1: warning: conversion from 'long' to 'char' may lose accuracy [132] */
     84  1.4  rillig 	char_var = long_var;
     85  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long' to 'char' may lose accuracy [132] */
     86  1.4  rillig 	char_var = ulong_var;
     87  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'char' may lose accuracy [132] */
     88  1.4  rillig 	char_var = llong_var;
     89  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'char' may lose accuracy [132] */
     90  1.4  rillig 	char_var = ullong_var;
     91  1.4  rillig 
     92  1.4  rillig 	schar_var = bool_var;
     93  1.4  rillig 	schar_var = char_var;
     94  1.4  rillig 	schar_var = schar_var;
     95  1.4  rillig 	schar_var = uchar_var;
     96  1.4  rillig 	schar_var = short_var;
     97  1.4  rillig 	schar_var = ushort_var;
     98  1.4  rillig 	/* expect+1: warning: conversion from 'int' to 'signed char' may lose accuracy [132] */
     99  1.4  rillig 	schar_var = int_var;
    100  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned int' to 'signed char' may lose accuracy [132] */
    101  1.4  rillig 	schar_var = uint_var;
    102  1.4  rillig 	/* expect+1: warning: conversion from 'long' to 'signed char' may lose accuracy [132] */
    103  1.4  rillig 	schar_var = long_var;
    104  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long' to 'signed char' may lose accuracy [132] */
    105  1.4  rillig 	schar_var = ulong_var;
    106  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'signed char' may lose accuracy [132] */
    107  1.4  rillig 	schar_var = llong_var;
    108  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'signed char' may lose accuracy [132] */
    109  1.4  rillig 	schar_var = ullong_var;
    110  1.4  rillig 
    111  1.4  rillig 	uchar_var = bool_var;
    112  1.4  rillig 	uchar_var = char_var;
    113  1.4  rillig 	uchar_var = schar_var;
    114  1.4  rillig 	uchar_var = uchar_var;
    115  1.4  rillig 	uchar_var = short_var;
    116  1.4  rillig 	uchar_var = ushort_var;
    117  1.4  rillig 	/* expect+1: warning: conversion from 'int' to 'unsigned char' may lose accuracy [132] */
    118  1.4  rillig 	uchar_var = int_var;
    119  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned int' to 'unsigned char' may lose accuracy [132] */
    120  1.4  rillig 	uchar_var = uint_var;
    121  1.4  rillig 	/* expect+1: warning: conversion from 'long' to 'unsigned char' may lose accuracy [132] */
    122  1.4  rillig 	uchar_var = long_var;
    123  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long' to 'unsigned char' may lose accuracy [132] */
    124  1.4  rillig 	uchar_var = ulong_var;
    125  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'unsigned char' may lose accuracy [132] */
    126  1.4  rillig 	uchar_var = llong_var;
    127  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned char' may lose accuracy [132] */
    128  1.4  rillig 	uchar_var = ullong_var;
    129  1.4  rillig 
    130  1.4  rillig 	short_var = bool_var;
    131  1.4  rillig 	short_var = char_var;
    132  1.4  rillig 	short_var = schar_var;
    133  1.4  rillig 	short_var = uchar_var;
    134  1.4  rillig 	short_var = short_var;
    135  1.4  rillig 	short_var = ushort_var;
    136  1.4  rillig 	/* expect+1: warning: conversion from 'int' to 'short' may lose accuracy [132] */
    137  1.4  rillig 	short_var = int_var;
    138  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned int' to 'short' may lose accuracy [132] */
    139  1.4  rillig 	short_var = uint_var;
    140  1.4  rillig 	/* expect+1: warning: conversion from 'long' to 'short' may lose accuracy [132] */
    141  1.4  rillig 	short_var = long_var;
    142  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long' to 'short' may lose accuracy [132] */
    143  1.4  rillig 	short_var = ulong_var;
    144  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'short' may lose accuracy [132] */
    145  1.4  rillig 	short_var = llong_var;
    146  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'short' may lose accuracy [132] */
    147  1.4  rillig 	short_var = ullong_var;
    148  1.4  rillig 
    149  1.4  rillig 	ushort_var = bool_var;
    150  1.4  rillig 	ushort_var = char_var;
    151  1.4  rillig 	ushort_var = schar_var;
    152  1.4  rillig 	ushort_var = uchar_var;
    153  1.4  rillig 	ushort_var = short_var;
    154  1.4  rillig 	ushort_var = ushort_var;
    155  1.4  rillig 	/* expect+1: warning: conversion from 'int' to 'unsigned short' may lose accuracy [132] */
    156  1.4  rillig 	ushort_var = int_var;
    157  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned int' to 'unsigned short' may lose accuracy [132] */
    158  1.4  rillig 	ushort_var = uint_var;
    159  1.4  rillig 	/* expect+1: warning: conversion from 'long' to 'unsigned short' may lose accuracy [132] */
    160  1.4  rillig 	ushort_var = long_var;
    161  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long' to 'unsigned short' may lose accuracy [132] */
    162  1.4  rillig 	ushort_var = ulong_var;
    163  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'unsigned short' may lose accuracy [132] */
    164  1.4  rillig 	ushort_var = llong_var;
    165  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned short' may lose accuracy [132] */
    166  1.4  rillig 	ushort_var = ullong_var;
    167  1.4  rillig 
    168  1.4  rillig 	int_var = bool_var;
    169  1.4  rillig 	int_var = char_var;
    170  1.4  rillig 	int_var = schar_var;
    171  1.4  rillig 	int_var = uchar_var;
    172  1.4  rillig 	int_var = short_var;
    173  1.4  rillig 	int_var = ushort_var;
    174  1.4  rillig 	int_var = int_var;
    175  1.4  rillig 	int_var = uint_var;
    176  1.4  rillig 	int_var = long_var;
    177  1.4  rillig 	int_var = ulong_var;
    178  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'int' may lose accuracy [132] */
    179  1.4  rillig 	int_var = llong_var;
    180  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'int' may lose accuracy [132] */
    181  1.4  rillig 	int_var = ullong_var;
    182  1.4  rillig 
    183  1.4  rillig 	uint_var = bool_var;
    184  1.4  rillig 	uint_var = char_var;
    185  1.4  rillig 	uint_var = schar_var;
    186  1.4  rillig 	uint_var = uchar_var;
    187  1.4  rillig 	uint_var = short_var;
    188  1.4  rillig 	uint_var = ushort_var;
    189  1.4  rillig 	uint_var = int_var;
    190  1.4  rillig 	uint_var = uint_var;
    191  1.4  rillig 	uint_var = long_var;
    192  1.4  rillig 	uint_var = ulong_var;
    193  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'unsigned int' may lose accuracy [132] */
    194  1.4  rillig 	uint_var = llong_var;
    195  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned int' may lose accuracy [132] */
    196  1.4  rillig 	uint_var = ullong_var;
    197  1.4  rillig 
    198  1.4  rillig 	long_var = bool_var;
    199  1.4  rillig 	long_var = char_var;
    200  1.4  rillig 	long_var = schar_var;
    201  1.4  rillig 	long_var = uchar_var;
    202  1.4  rillig 	long_var = short_var;
    203  1.4  rillig 	long_var = ushort_var;
    204  1.4  rillig 	long_var = int_var;
    205  1.4  rillig 	long_var = uint_var;
    206  1.4  rillig 	long_var = long_var;
    207  1.4  rillig 	long_var = ulong_var;
    208  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'long' may lose accuracy [132] */
    209  1.4  rillig 	long_var = llong_var;
    210  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'long' may lose accuracy [132] */
    211  1.4  rillig 	long_var = ullong_var;
    212  1.4  rillig 
    213  1.4  rillig 	ulong_var = bool_var;
    214  1.4  rillig 	ulong_var = char_var;
    215  1.4  rillig 	ulong_var = schar_var;
    216  1.4  rillig 	ulong_var = uchar_var;
    217  1.4  rillig 	ulong_var = short_var;
    218  1.4  rillig 	ulong_var = ushort_var;
    219  1.4  rillig 	ulong_var = int_var;
    220  1.4  rillig 	ulong_var = uint_var;
    221  1.4  rillig 	ulong_var = long_var;
    222  1.4  rillig 	ulong_var = ulong_var;
    223  1.4  rillig 	/* expect+1: warning: conversion from 'long long' to 'unsigned long' may lose accuracy [132] */
    224  1.4  rillig 	ulong_var = llong_var;
    225  1.4  rillig 	/* expect+1: warning: conversion from 'unsigned long long' to 'unsigned long' may lose accuracy [132] */
    226  1.4  rillig 	ulong_var = ullong_var;
    227  1.4  rillig 
    228  1.4  rillig 	llong_var = bool_var;
    229  1.4  rillig 	llong_var = char_var;
    230  1.4  rillig 	llong_var = schar_var;
    231  1.4  rillig 	llong_var = uchar_var;
    232  1.4  rillig 	llong_var = short_var;
    233  1.4  rillig 	llong_var = ushort_var;
    234  1.4  rillig 	llong_var = int_var;
    235  1.4  rillig 	llong_var = uint_var;
    236  1.4  rillig 	llong_var = long_var;
    237  1.4  rillig 	llong_var = ulong_var;
    238  1.4  rillig 	llong_var = llong_var;
    239  1.4  rillig 	llong_var = ullong_var;
    240  1.4  rillig 
    241  1.4  rillig 	ullong_var = bool_var;
    242  1.4  rillig 	ullong_var = char_var;
    243  1.4  rillig 	ullong_var = schar_var;
    244  1.4  rillig 	ullong_var = uchar_var;
    245  1.4  rillig 	ullong_var = short_var;
    246  1.4  rillig 	ullong_var = ushort_var;
    247  1.4  rillig 	ullong_var = int_var;
    248  1.4  rillig 	ullong_var = uint_var;
    249  1.4  rillig 	ullong_var = long_var;
    250  1.4  rillig 	ullong_var = ulong_var;
    251  1.4  rillig 	ullong_var = llong_var;
    252  1.4  rillig 	ullong_var = ullong_var;
    253  1.4  rillig }
    254