1*7e8e260dSrillig /* $NetBSD: msg_132_ilp32.c,v 1.5 2023/08/08 20:15:11 rillig Exp $ */
292de156fSrillig # 3 "msg_132_ilp32.c"
392de156fSrillig
492de156fSrillig // Test for message: conversion from '%s' to '%s' may lose accuracy [132]
592de156fSrillig
692de156fSrillig /*
792de156fSrillig * On 32-bit platforms, it is possible to add a 64-bit integer to a 32-bit
892de156fSrillig * pointer. The 64-bit integer is then converted to the ptrdiff_t of the
992de156fSrillig * target platform, which results in the non-obvious conversion from
1092de156fSrillig * 'long long' to either 'long' or 'int', depending on the platform's
1192de156fSrillig * ptrdiff_t.
1292de156fSrillig */
1392de156fSrillig
1492de156fSrillig /* lint1-only-if: ilp32 int */
15b2baa501Srillig /* lint1-extra-flags: -a -X 351 */
1692de156fSrillig
1792de156fSrillig /*
1892de156fSrillig * Seen in usr.bin/make/var.c, function RegexReplace, in the function call
1992de156fSrillig * SepBuf_AddBytesBetween(buf, wp + m[0].rm_so, wp + m[0].rm_eo). The
2092de156fSrillig * offsets of regular expression matches have type off_t, which is a 64-bit
2192de156fSrillig * integer.
2292de156fSrillig *
2392de156fSrillig * C11 6.5.6p8 does not explicitly define the meaning of a pointer + an
2492de156fSrillig * overly long integer, it just says "undefined behavior" if the resulting
2592de156fSrillig * pointer would be outside the object.
2692de156fSrillig */
2792de156fSrillig const char *
array_subscript(const char * p,long long idx)2892de156fSrillig array_subscript(const char *p, long long idx)
2992de156fSrillig {
3092de156fSrillig /* expect+1: warning: conversion from 'long long' to 'int' may lose accuracy [132] */
3192de156fSrillig return p + idx;
3292de156fSrillig }
33b511067dSrillig
34b511067dSrillig /*
35b511067dSrillig * On ILP32 platforms, pointer, long and int have the same size, so there is
36b511067dSrillig * no loss of accuracy.
37b511067dSrillig */
38b511067dSrillig unsigned int
convert_pointer_to_smaller_integer(void * ptr)39b511067dSrillig convert_pointer_to_smaller_integer(void *ptr)
40b511067dSrillig {
41b511067dSrillig return (unsigned long)(ptr) >> 12;
42b511067dSrillig }
4353d7acccSrillig
4453d7acccSrillig _Bool bool_var;
4553d7acccSrillig char char_var;
4653d7acccSrillig signed char schar_var;
4753d7acccSrillig unsigned char uchar_var;
4853d7acccSrillig short short_var;
4953d7acccSrillig unsigned short ushort_var;
5053d7acccSrillig int int_var;
5153d7acccSrillig unsigned int uint_var;
5253d7acccSrillig long long_var;
5353d7acccSrillig unsigned long ulong_var;
5453d7acccSrillig long long llong_var;
5553d7acccSrillig unsigned long long ullong_var;
5653d7acccSrillig
5753d7acccSrillig void
convert_all(void)5853d7acccSrillig convert_all(void)
5953d7acccSrillig {
6053d7acccSrillig bool_var = bool_var;
6153d7acccSrillig bool_var = char_var;
6253d7acccSrillig bool_var = schar_var;
6353d7acccSrillig bool_var = uchar_var;
6453d7acccSrillig bool_var = short_var;
6553d7acccSrillig bool_var = ushort_var;
6653d7acccSrillig bool_var = int_var;
6753d7acccSrillig bool_var = uint_var;
6853d7acccSrillig bool_var = long_var;
6953d7acccSrillig bool_var = ulong_var;
7053d7acccSrillig bool_var = llong_var;
7153d7acccSrillig bool_var = ullong_var;
7253d7acccSrillig
7353d7acccSrillig char_var = bool_var;
7453d7acccSrillig char_var = char_var;
7553d7acccSrillig char_var = schar_var;
7653d7acccSrillig char_var = uchar_var;
7753d7acccSrillig char_var = short_var;
7853d7acccSrillig char_var = ushort_var;
7953d7acccSrillig char_var = int_var;
8053d7acccSrillig char_var = uint_var;
8153d7acccSrillig /* expect+1: warning: conversion from 'long' to 'char' may lose accuracy [132] */
8253d7acccSrillig char_var = long_var;
8353d7acccSrillig /* expect+1: warning: conversion from 'unsigned long' to 'char' may lose accuracy [132] */
8453d7acccSrillig char_var = ulong_var;
8553d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'char' may lose accuracy [132] */
8653d7acccSrillig char_var = llong_var;
8753d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'char' may lose accuracy [132] */
8853d7acccSrillig char_var = ullong_var;
8953d7acccSrillig
9053d7acccSrillig schar_var = bool_var;
9153d7acccSrillig schar_var = char_var;
9253d7acccSrillig schar_var = schar_var;
9353d7acccSrillig schar_var = uchar_var;
9453d7acccSrillig schar_var = short_var;
9553d7acccSrillig schar_var = ushort_var;
9653d7acccSrillig schar_var = int_var;
9753d7acccSrillig schar_var = uint_var;
9853d7acccSrillig /* expect+1: warning: conversion from 'long' to 'signed char' may lose accuracy [132] */
9953d7acccSrillig schar_var = long_var;
10053d7acccSrillig /* expect+1: warning: conversion from 'unsigned long' to 'signed char' may lose accuracy [132] */
10153d7acccSrillig schar_var = ulong_var;
10253d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'signed char' may lose accuracy [132] */
10353d7acccSrillig schar_var = llong_var;
10453d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'signed char' may lose accuracy [132] */
10553d7acccSrillig schar_var = ullong_var;
10653d7acccSrillig
10753d7acccSrillig uchar_var = bool_var;
10853d7acccSrillig uchar_var = char_var;
10953d7acccSrillig uchar_var = schar_var;
11053d7acccSrillig uchar_var = uchar_var;
11153d7acccSrillig uchar_var = short_var;
11253d7acccSrillig uchar_var = ushort_var;
11353d7acccSrillig uchar_var = int_var;
11453d7acccSrillig uchar_var = uint_var;
11553d7acccSrillig /* expect+1: warning: conversion from 'long' to 'unsigned char' may lose accuracy [132] */
11653d7acccSrillig uchar_var = long_var;
11753d7acccSrillig /* expect+1: warning: conversion from 'unsigned long' to 'unsigned char' may lose accuracy [132] */
11853d7acccSrillig uchar_var = ulong_var;
11953d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'unsigned char' may lose accuracy [132] */
12053d7acccSrillig uchar_var = llong_var;
12153d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned char' may lose accuracy [132] */
12253d7acccSrillig uchar_var = ullong_var;
12353d7acccSrillig
12453d7acccSrillig short_var = bool_var;
12553d7acccSrillig short_var = char_var;
12653d7acccSrillig short_var = schar_var;
12753d7acccSrillig short_var = uchar_var;
12853d7acccSrillig short_var = short_var;
12953d7acccSrillig short_var = ushort_var;
13053d7acccSrillig short_var = int_var;
13153d7acccSrillig short_var = uint_var;
13253d7acccSrillig /* expect+1: warning: conversion from 'long' to 'short' may lose accuracy [132] */
13353d7acccSrillig short_var = long_var;
13453d7acccSrillig /* expect+1: warning: conversion from 'unsigned long' to 'short' may lose accuracy [132] */
13553d7acccSrillig short_var = ulong_var;
13653d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'short' may lose accuracy [132] */
13753d7acccSrillig short_var = llong_var;
13853d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'short' may lose accuracy [132] */
13953d7acccSrillig short_var = ullong_var;
14053d7acccSrillig
14153d7acccSrillig ushort_var = bool_var;
14253d7acccSrillig ushort_var = char_var;
14353d7acccSrillig ushort_var = schar_var;
14453d7acccSrillig ushort_var = uchar_var;
14553d7acccSrillig ushort_var = short_var;
14653d7acccSrillig ushort_var = ushort_var;
14753d7acccSrillig ushort_var = int_var;
14853d7acccSrillig ushort_var = uint_var;
14953d7acccSrillig /* expect+1: warning: conversion from 'long' to 'unsigned short' may lose accuracy [132] */
15053d7acccSrillig ushort_var = long_var;
15153d7acccSrillig /* expect+1: warning: conversion from 'unsigned long' to 'unsigned short' may lose accuracy [132] */
15253d7acccSrillig ushort_var = ulong_var;
15353d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'unsigned short' may lose accuracy [132] */
15453d7acccSrillig ushort_var = llong_var;
15553d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned short' may lose accuracy [132] */
15653d7acccSrillig ushort_var = ullong_var;
15753d7acccSrillig
15853d7acccSrillig int_var = bool_var;
15953d7acccSrillig int_var = char_var;
16053d7acccSrillig int_var = schar_var;
16153d7acccSrillig int_var = uchar_var;
16253d7acccSrillig int_var = short_var;
16353d7acccSrillig int_var = ushort_var;
16453d7acccSrillig int_var = int_var;
16553d7acccSrillig int_var = uint_var;
16653d7acccSrillig int_var = long_var;
16753d7acccSrillig int_var = ulong_var;
16853d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'int' may lose accuracy [132] */
16953d7acccSrillig int_var = llong_var;
17053d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'int' may lose accuracy [132] */
17153d7acccSrillig int_var = ullong_var;
17253d7acccSrillig
17353d7acccSrillig uint_var = bool_var;
17453d7acccSrillig uint_var = char_var;
17553d7acccSrillig uint_var = schar_var;
17653d7acccSrillig uint_var = uchar_var;
17753d7acccSrillig uint_var = short_var;
17853d7acccSrillig uint_var = ushort_var;
17953d7acccSrillig uint_var = int_var;
18053d7acccSrillig uint_var = uint_var;
18153d7acccSrillig uint_var = long_var;
18253d7acccSrillig uint_var = ulong_var;
18353d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'unsigned int' may lose accuracy [132] */
18453d7acccSrillig uint_var = llong_var;
18553d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned int' may lose accuracy [132] */
18653d7acccSrillig uint_var = ullong_var;
18753d7acccSrillig
18853d7acccSrillig long_var = bool_var;
18953d7acccSrillig long_var = char_var;
19053d7acccSrillig long_var = schar_var;
19153d7acccSrillig long_var = uchar_var;
19253d7acccSrillig long_var = short_var;
19353d7acccSrillig long_var = ushort_var;
19453d7acccSrillig long_var = int_var;
19553d7acccSrillig long_var = uint_var;
19653d7acccSrillig long_var = long_var;
19753d7acccSrillig long_var = ulong_var;
19853d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'long' may lose accuracy [132] */
19953d7acccSrillig long_var = llong_var;
20053d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'long' may lose accuracy [132] */
20153d7acccSrillig long_var = ullong_var;
20253d7acccSrillig
20353d7acccSrillig ulong_var = bool_var;
20453d7acccSrillig ulong_var = char_var;
20553d7acccSrillig ulong_var = schar_var;
20653d7acccSrillig ulong_var = uchar_var;
20753d7acccSrillig ulong_var = short_var;
20853d7acccSrillig ulong_var = ushort_var;
20953d7acccSrillig ulong_var = int_var;
21053d7acccSrillig ulong_var = uint_var;
21153d7acccSrillig ulong_var = long_var;
21253d7acccSrillig ulong_var = ulong_var;
21353d7acccSrillig /* expect+1: warning: conversion from 'long long' to 'unsigned long' may lose accuracy [132] */
21453d7acccSrillig ulong_var = llong_var;
21553d7acccSrillig /* expect+1: warning: conversion from 'unsigned long long' to 'unsigned long' may lose accuracy [132] */
21653d7acccSrillig ulong_var = ullong_var;
21753d7acccSrillig
21853d7acccSrillig llong_var = bool_var;
21953d7acccSrillig llong_var = char_var;
22053d7acccSrillig llong_var = schar_var;
22153d7acccSrillig llong_var = uchar_var;
22253d7acccSrillig llong_var = short_var;
22353d7acccSrillig llong_var = ushort_var;
22453d7acccSrillig llong_var = int_var;
22553d7acccSrillig llong_var = uint_var;
22653d7acccSrillig llong_var = long_var;
22753d7acccSrillig llong_var = ulong_var;
22853d7acccSrillig llong_var = llong_var;
22953d7acccSrillig llong_var = ullong_var;
23053d7acccSrillig
23153d7acccSrillig ullong_var = bool_var;
23253d7acccSrillig ullong_var = char_var;
23353d7acccSrillig ullong_var = schar_var;
23453d7acccSrillig ullong_var = uchar_var;
23553d7acccSrillig ullong_var = short_var;
23653d7acccSrillig ullong_var = ushort_var;
23753d7acccSrillig ullong_var = int_var;
23853d7acccSrillig ullong_var = uint_var;
23953d7acccSrillig ullong_var = long_var;
24053d7acccSrillig ullong_var = ulong_var;
24153d7acccSrillig ullong_var = llong_var;
24253d7acccSrillig ullong_var = ullong_var;
24353d7acccSrillig }
244