xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_141.c (revision 8910413e27cb05f863b5efab02d86e971e6a3d45)
1*8910413eSrillig /*	$NetBSD: msg_141.c,v 1.17 2024/03/27 20:09:43 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_141.c"
3a0a15c14Srillig 
4dd848decSrillig // Test for message: '%s' overflows '%s' [141]
5a0a15c14Srillig 
6b2baa501Srillig /* lint1-extra-flags: -h -X 351 */
7bc15589aSrillig 
816f849b6Srillig // Integer overflow occurs when the arbitrary-precision result of an
916f849b6Srillig // arithmetic operation cannot be represented by the type of the expression.
10bc15589aSrillig 
1116f849b6Srillig signed int s32;
1216f849b6Srillig unsigned int u32;
1316f849b6Srillig signed long long s64;
1416f849b6Srillig unsigned long long u64;
15*8910413eSrillig _Bool cond;
16bc15589aSrillig 
1716f849b6Srillig void
compl_s32(void)1816f849b6Srillig compl_s32(void)
1916f849b6Srillig {
2016f849b6Srillig 	s32 = ~(-0x7fffffff - 1);
2116f849b6Srillig 	s32 = ~-1;
2216f849b6Srillig 	s32 = ~0;
2316f849b6Srillig 	s32 = ~1;
2416f849b6Srillig 	s32 = ~0x7fffffff;
2516f849b6Srillig }
26bc15589aSrillig 
2716f849b6Srillig void
compl_u32(void)2816f849b6Srillig compl_u32(void)
2916f849b6Srillig {
3016f849b6Srillig 	u32 = ~0x00000000U;
3116f849b6Srillig 	u32 = ~0x7fffffffU;
3216f849b6Srillig 	u32 = ~0x80000000U;
3316f849b6Srillig 	u32 = ~0xffffffffU;
3416f849b6Srillig }
35bc15589aSrillig 
3616f849b6Srillig void
compl_s64(void)3716f849b6Srillig compl_s64(void)
3816f849b6Srillig {
3916f849b6Srillig 	s64 = ~(-0x7fffffffffffffffLL - 1LL);
4016f849b6Srillig 	s64 = ~-1LL;
4116f849b6Srillig 	s64 = ~0LL;
4216f849b6Srillig 	s64 = ~0x7fffffffffffffffLL;
4316f849b6Srillig }
4422fd140dSrillig 
4516f849b6Srillig void
compl_u64(void)4616f849b6Srillig compl_u64(void)
4716f849b6Srillig {
4816f849b6Srillig 	u64 = ~0ULL;
4916f849b6Srillig 	u64 = ~0x7fffffffffffffffULL;
5016f849b6Srillig 	u64 = ~0x8000000000000000ULL;
5116f849b6Srillig 	u64 = ~0xffffffffffffffffULL;
5216f849b6Srillig }
5316f849b6Srillig 
5416f849b6Srillig void
uplus_s32(void)5516f849b6Srillig uplus_s32(void)
5616f849b6Srillig {
5716f849b6Srillig 	s32 = +(-0x7fffffff - 1);
5816f849b6Srillig 	s32 = +-1;
5916f849b6Srillig 	s32 = +0;
6016f849b6Srillig 	s32 = +0x7fffffff;
6116f849b6Srillig }
6216f849b6Srillig 
6316f849b6Srillig void
uplus_u32(void)6416f849b6Srillig uplus_u32(void)
6516f849b6Srillig {
6616f849b6Srillig 	u32 = +0x00000000U;
6716f849b6Srillig 	u32 = +0x7fffffffU;
6816f849b6Srillig 	u32 = +0x80000000U;
6916f849b6Srillig 	u32 = +0xffffffffU;
7016f849b6Srillig }
7116f849b6Srillig 
7216f849b6Srillig void
uplus_s64(void)7316f849b6Srillig uplus_s64(void)
7416f849b6Srillig {
7516f849b6Srillig 	s64 = +(-0x7fffffffffffffffLL - 1LL);
7616f849b6Srillig 	s64 = +-1LL;
7716f849b6Srillig 	s64 = +0LL;
7816f849b6Srillig 	s64 = +0x7fffffffffffffffLL;
7916f849b6Srillig }
8016f849b6Srillig 
8116f849b6Srillig void
uplus_u64(void)8216f849b6Srillig uplus_u64(void)
8316f849b6Srillig {
8416f849b6Srillig 	u64 = +0x0000000000000000ULL;
8516f849b6Srillig 	u64 = +0x7fffffffffffffffULL;
8616f849b6Srillig 	u64 = +0x8000000000000000ULL;
8716f849b6Srillig 	u64 = +0xffffffffffffffffULL;
8816f849b6Srillig }
8916f849b6Srillig 
9016f849b6Srillig void
uminus_s32(void)9116f849b6Srillig uminus_s32(void)
9216f849b6Srillig {
93dd848decSrillig 	/* expect+1: warning: '-(-2147483648)' overflows 'int' [141] */
9416f849b6Srillig 	s32 = -(-0x7fffffff - 1);
9516f849b6Srillig 	s32 = - -1;
9616f849b6Srillig 	s32 = -0;
9716f849b6Srillig 	s32 = -0x7fffffff;
9816f849b6Srillig }
9922fd140dSrillig 
10016f849b6Srillig void
uminus_u32(void)10116f849b6Srillig uminus_u32(void)
10216f849b6Srillig {
10316f849b6Srillig 	u32 = -0x00000000U;
10416f849b6Srillig 	u32 = -0x7fffffffU;
10516f849b6Srillig 	u32 = -0x80000000U;
10616f849b6Srillig 	u32 = -0xffffffffU;
10716f849b6Srillig }
108cc3c7d5bSrillig 
10916f849b6Srillig void
uminus_s64(void)11016f849b6Srillig uminus_s64(void)
11116f849b6Srillig {
112dd848decSrillig 	/* expect+1: warning: '-(-9223372036854775808)' overflows 'long long' [141] */
11316f849b6Srillig 	s64 = -(-0x7fffffffffffffffLL - 1LL);
11416f849b6Srillig 	s64 = - -1LL;
11516f849b6Srillig 	s64 = -0LL;
11616f849b6Srillig 	s64 = -0x7fffffffffffffffLL;
11716f849b6Srillig }
11816f849b6Srillig 
11916f849b6Srillig void
uminus_u64(void)12016f849b6Srillig uminus_u64(void)
12116f849b6Srillig {
12216f849b6Srillig 	u64 = -0x0000000000000000ULL;
12316f849b6Srillig 	u64 = -0x7fffffffffffffffULL;
12416f849b6Srillig 	u64 = -0x8000000000000000ULL;
12516f849b6Srillig 	u64 = -0xffffffffffffffffULL;
12616f849b6Srillig }
127cc3c7d5bSrillig 
12816f849b6Srillig void
mult_s32(void)12916f849b6Srillig mult_s32(void)
13016f849b6Srillig {
131dd848decSrillig 	/* expect+1: warning: '-65536 * 65536' overflows 'int' [141] */
13216f849b6Srillig 	s32 = -0x00010000 * +0x00010000;	// -0x0100000000
133dd848decSrillig 	/* expect+1: warning: '-3 * 715827883' overflows 'int' [141] */
13416f849b6Srillig 	s32 = -0x00000003 * +0x2aaaaaab;	// -0x80000001
135dd848decSrillig 	/* expect+1: warning: '715827883 * -3' overflows 'int' [141] */
13616f849b6Srillig 	s32 = +0x2aaaaaab * -0x00000003;	// -0x80000001
13716f849b6Srillig 	s32 = -0x00000008 * +0x10000000;	// -0x80000000
13816f849b6Srillig 	s32 = +0x10000000 * -0x00000008;	// -0x80000000
13916f849b6Srillig 	s32 = +0x00000002 * +0x3fffffff;	// +0x7ffffffe
14016f849b6Srillig 	s32 = +0x3fffffff * +0x00000002;	// +0x7ffffffe
14116f849b6Srillig 	s32 = +0x7fffffff * +0x00000001;	// +0x7fffffff
14216f849b6Srillig 	s32 = +0x00000001 * +0x7fffffff;	// +0x7fffffff
143dd848decSrillig 	/* expect+1: warning: '2 * 1073741824' overflows 'int' [141] */
14416f849b6Srillig 	s32 = +0x00000002 * +0x40000000;	// +0x80000000
145dd848decSrillig 	/* expect+1: warning: '1073741824 * 2' overflows 'int' [141] */
14616f849b6Srillig 	s32 = +0x40000000 * +0x00000002;	// +0x80000000
147dd848decSrillig 	/* expect+1: warning: '65535 * 65537' overflows 'int' [141] */
14816f849b6Srillig 	s32 = +0x0000ffff * +0x00010001;	// +0xffffffff
149dd848decSrillig 	/* expect+1: warning: '65536 * 65536' overflows 'int' [141] */
15016f849b6Srillig 	s32 = +0x00010000 * +0x00010000;	// +0x0100000000
15116f849b6Srillig }
15216f849b6Srillig 
15316f849b6Srillig void
mult_u32(void)15416f849b6Srillig mult_u32(void)
15516f849b6Srillig {
15616f849b6Srillig 	u32 = 0xffffU * 0x10001U;		// +0xffffffff
157dd848decSrillig 	/* expect+1: warning: '65536 * 65536' overflows 'unsigned int' [141] */
15816f849b6Srillig 	u32 = 0x10000U * 0x10000U;		// +0x0100000000
15916f849b6Srillig }
16016f849b6Srillig 
16116f849b6Srillig void
mult_s64(void)16216f849b6Srillig mult_s64(void)
16316f849b6Srillig {
164dd848decSrillig 	/* expect+1: warning: '-4294967296 * 4294967296' overflows 'long long' [141] */
16534885a59Srillig 	s64 = -0x100000000LL * 0x100000000LL;	// -0x010000000000000000
166dd848decSrillig 	/* expect+1: warning: '-3 * 3074457345618258603' overflows 'long long' [141] */
16734885a59Srillig 	s64 = -3LL * 0x2aaaaaaaaaaaaaabLL;	// -0x8000000000000001
168dd848decSrillig 	/* expect+1: warning: '3074457345618258603 * -3' overflows 'long long' [141] */
16934885a59Srillig 	s64 = 0x2aaaaaaaaaaaaaabLL * -3LL;	// -0x8000000000000001
17016f849b6Srillig 	s64 = -8LL * +0x1000000000000000LL;	// -0x8000000000000000
17116f849b6Srillig 	s64 = +0x1000000000000000LL * -8LL;	// -0x8000000000000000
17216f849b6Srillig 	s64 = +2LL * +0x3fffffffffffffffLL;	// +0x7ffffffffffffffe
17316f849b6Srillig 	s64 = +0x3fffffffffffffffLL * +2LL;	// +0x7ffffffffffffffe
17416f849b6Srillig 	s64 = +0x7fffffffffffffffLL * +1LL;	// +0x7fffffffffffffff
17516f849b6Srillig 	s64 = +1LL * +0x7fffffffffffffffLL;	// +0x7fffffffffffffff
176dd848decSrillig 	/* expect+1: warning: '2 * 4611686018427387904' overflows 'long long' [141] */
17734885a59Srillig 	s64 = +2LL * +0x4000000000000000LL;	// +0x8000000000000000
178dd848decSrillig 	/* expect+1: warning: '4611686018427387904 * 2' overflows 'long long' [141] */
17934885a59Srillig 	s64 = +0x4000000000000000LL * +2LL;	// +0x8000000000000000
180dd848decSrillig 	/* expect+1: warning: '4294967295 * 4294967297' overflows 'long long' [141] */
18134885a59Srillig 	s64 = +0xffffffffLL * +0x100000001LL;	// +0xffffffffffffffff
182dd848decSrillig 	/* expect+1: warning: '4294967296 * 4294967296' overflows 'long long' [141] */
18334885a59Srillig 	s64 = +0x100000000LL * +0x100000000LL;	// +0x010000000000000000
18416f849b6Srillig }
185cc3c7d5bSrillig 
18616f849b6Srillig void
mult_u64(void)18716f849b6Srillig mult_u64(void)
18816f849b6Srillig {
18916f849b6Srillig 	u64 = 0xffffffffULL * 0x100000001ULL;	// +0xffffffffffffffff
19016f849b6Srillig 	u64 = 0x00010000ULL * 0x00010000ULL;	// +0x0100000000
191dd848decSrillig 	/* expect+1: warning: '4294967296 * 4294967296' overflows 'unsigned long long' [141] */
19216f849b6Srillig 	u64 = 0x100000000ULL * 0x100000000ULL;	// +0x010000000000000000
19316f849b6Srillig }
194cc3c7d5bSrillig 
19516f849b6Srillig void
div_s32(void)19616f849b6Srillig div_s32(void)
19716f849b6Srillig {
198dd848decSrillig 	/* expect+1: warning: '-2147483648 / -1' overflows 'int' [141] */
19916f849b6Srillig 	s32 = (-0x7fffffff - 1) / -1;
20016f849b6Srillig 	s32 = (-0x7fffffff - 1) / 1;
20116f849b6Srillig 	s32 = 0x7fffffff / -1;
20216f849b6Srillig 	/* expect+1: error: division by 0 [139] */
20316f849b6Srillig 	s32 = 0 / 0;
20416f849b6Srillig 	/* expect+1: error: division by 0 [139] */
20516f849b6Srillig 	s32 = 0x7fffffff / 0;
20616f849b6Srillig }
207cc3c7d5bSrillig 
20816f849b6Srillig void
div_u32(void)20916f849b6Srillig div_u32(void)
21016f849b6Srillig {
21116f849b6Srillig 	u32 = 0xffffffffU / -1U;
21216f849b6Srillig 	u32 = 0xffffffffU / 1U;
21316f849b6Srillig 	/* expect+1: error: division by 0 [139] */
21416f849b6Srillig 	u32 = 0U / 0U;
21516f849b6Srillig 	/* expect+1: error: division by 0 [139] */
21616f849b6Srillig 	u32 = 0xffffffffU / 0U;
21716f849b6Srillig }
218cc3c7d5bSrillig 
21916f849b6Srillig void
div_s64(void)22016f849b6Srillig div_s64(void)
22116f849b6Srillig {
222dd848decSrillig 	/* expect+1: warning: '-9223372036854775808 / -1' overflows 'long long' [141] */
22316f849b6Srillig 	s64 = (-0x7fffffffffffffffLL - 1LL) / -1LL;
22416f849b6Srillig 	s64 = (-0x7fffffffffffffffLL - 1LL) / 1LL;
22516f849b6Srillig 	s64 = (-0x7fffffffffffffffLL - 1LL) / 0x7fffffffffffffffLL;
22616f849b6Srillig 	s64 = 0x7fffffffffffffffLL / -1LL;
22716f849b6Srillig 	s64 = (-0x7fffffffLL - 1LL) / -1LL;
22816f849b6Srillig 	s64 = (-0x7fffffffLL - 1LL) / 0x7fffffffLL;
22916f849b6Srillig 	/* expect+1: error: division by 0 [139] */
23016f849b6Srillig 	s64 = 0LL / 0LL;
23116f849b6Srillig 	/* expect+1: error: division by 0 [139] */
23216f849b6Srillig 	s64 = 0x7fffffffffffffffLL / 0LL;
23316f849b6Srillig }
234cc3c7d5bSrillig 
23516f849b6Srillig void
div_u64(void)23616f849b6Srillig div_u64(void)
23716f849b6Srillig {
23816f849b6Srillig 	u64 = 0xffffffffffffffffULL / -1ULL;
23916f849b6Srillig 	u64 = 0xffffffffffffffffULL / 1ULL;
24016f849b6Srillig 	/* expect+1: error: division by 0 [139] */
24116f849b6Srillig 	u64 = 0ULL / 0ULL;
24216f849b6Srillig 	/* expect+1: error: division by 0 [139] */
24316f849b6Srillig 	u64 = 0xffffffffffffffffULL / 0ULL;
24416f849b6Srillig }
245cc3c7d5bSrillig 
24616f849b6Srillig void
mod_s32(void)24716f849b6Srillig mod_s32(void)
24816f849b6Srillig {
24916f849b6Srillig 	s32 = -1 % (-0x7fffffff - 1);
25016f849b6Srillig 	s32 = -1 % 0x7fffffff;
251dd848decSrillig 	/* expect+1: warning: '-2147483648 % -1' overflows 'int' [141] */
25216f849b6Srillig 	s32 = (-0x7fffffff - 1) % -1;
25316f849b6Srillig 	s32 = 0x7fffffff % -1;
25416f849b6Srillig }
255cc3c7d5bSrillig 
25616f849b6Srillig void
mod_u32(void)25716f849b6Srillig mod_u32(void)
25816f849b6Srillig {
25916f849b6Srillig 	u64 = 0xffffffffU % -1U;
26016f849b6Srillig 	u64 = 0xffffffffU % 1U;
26116f849b6Srillig 	/* expect+1: error: modulus by 0 [140] */
26216f849b6Srillig 	u64 = 0U % 0U;
26316f849b6Srillig 	/* expect+1: error: modulus by 0 [140] */
26416f849b6Srillig 	u64 = 0xffffffffU % 0U;
26516f849b6Srillig }
266cc3c7d5bSrillig 
26716f849b6Srillig void
mod_s64(void)26816f849b6Srillig mod_s64(void)
26916f849b6Srillig {
27016f849b6Srillig 	s64 = -1LL % (-0x7fffffffffffffffLL - 1LL);
27116f849b6Srillig 	s64 = -1LL % 0x7fffffffffffffffLL;
272dd848decSrillig 	/* expect+1: warning: '-9223372036854775808 % -1' overflows 'long long' [141] */
27334885a59Srillig 	s64 = (-0x7fffffffffffffffLL - 1LL) % -1LL;
27416f849b6Srillig 	s64 = 0x7fffffffffffffffLL % -1LL;
27516f849b6Srillig }
27616f849b6Srillig 
27716f849b6Srillig void
mod_u64(void)27816f849b6Srillig mod_u64(void)
27916f849b6Srillig {
28016f849b6Srillig 	u64 = 0xffffffffffffffffULL % -1ULL;
28116f849b6Srillig 	u64 = 0xffffffffffffffffULL % 1ULL;
28216f849b6Srillig 	/* expect+1: error: modulus by 0 [140] */
28316f849b6Srillig 	u64 = 0ULL % 0ULL;
28416f849b6Srillig 	/* expect+1: error: modulus by 0 [140] */
28516f849b6Srillig 	u64 = 0xffffffffffffffffULL % 0ULL;
28616f849b6Srillig }
28716f849b6Srillig 
28816f849b6Srillig void
plus_s32(void)28916f849b6Srillig plus_s32(void)
29016f849b6Srillig {
291dd848decSrillig 	/* expect+1: warning: '-2147483647 + -2147483647' overflows 'int' [141] */
29216f849b6Srillig 	s32 = -0x7fffffff + -0x7fffffff;
293dd848decSrillig 	/* expect+1: warning: '-2147483647 + -2' overflows 'int' [141] */
29416f849b6Srillig 	s32 = -0x7fffffff + -2;			// INT_MIN - 1
295dd848decSrillig 	/* expect+1: warning: '-2 + -2147483647' overflows 'int' [141] */
29616f849b6Srillig 	s32 = -2 + -0x7fffffff;			// INT_MIN - 1
29716f849b6Srillig 	s32 = -0x7fffffff + -1;			// INT_MIN
29816f849b6Srillig 	s32 = -1 + -0x7fffffff;			// INT_MIN
29916f849b6Srillig 	s32 = -0x7fffffff + 0;			// INT_MIN + 1
30016f849b6Srillig 	s32 = 0 + -0x7fffffff;			// INT_MIN + 1
30116f849b6Srillig 	s32 = (-0x7fffffff - 1) + 0x7fffffff;	// -1
30216f849b6Srillig 	s32 = 0x7fffffff + (-0x7fffffff - 1);	// -1
30316f849b6Srillig 	s32 = 0x7ffffffe + 1;			// INT_MAX
30416f849b6Srillig 	s32 = 1 + 0x7ffffffe;			// INT_MAX
30516f849b6Srillig 	s32 = 0x7fffffff + 0;			// INT_MAX
30616f849b6Srillig 	s32 = 0 + 0x7fffffff;			// INT_MAX
307dd848decSrillig 	/* expect+1: warning: '2147483647 + 1' overflows 'int' [141] */
30816f849b6Srillig 	s32 = 0x7fffffff + 1;			// INT_MAX + 1
309dd848decSrillig 	/* expect+1: warning: '1 + 2147483647' overflows 'int' [141] */
31016f849b6Srillig 	s32 = 1 + 0x7fffffff;			// INT_MAX + 1
311dd848decSrillig 	/* expect+1: warning: '1073741824 + 1073741824' overflows 'int' [141] */
31216f849b6Srillig 	s32 = 0x40000000 + 0x40000000;		// INT_MAX + 1
313dd848decSrillig 	/* expect+1: warning: '2147483647 + 2147483647' overflows 'int' [141] */
31416f849b6Srillig 	s32 = 0x7fffffff + 0x7fffffff;
31516f849b6Srillig }
31616f849b6Srillig 
31716f849b6Srillig void
plus_u32(void)31816f849b6Srillig plus_u32(void)
31916f849b6Srillig {
32016f849b6Srillig 	u32 = 0x00000000U + 0x00000000U;
32116f849b6Srillig 	u32 = 0x40000000U + 0x40000000U;
32216f849b6Srillig 	u32 = 0xffffffffU + 0x00000000U;
32316f849b6Srillig 	u32 = 0x00000000U + 0xffffffffU;
32416f849b6Srillig 	u32 = 0xfffffffeU + 0x00000001U;
325dd848decSrillig 	/* expect+1: warning: '4294967295 + 1' overflows 'unsigned int' [141] */
32616f849b6Srillig 	u32 = 0xffffffffU + 0x00000001U;
327dd848decSrillig 	/* expect+1: warning: '1 + 4294967295' overflows 'unsigned int' [141] */
32816f849b6Srillig 	u32 = 0x00000001U + 0xffffffffU;
329dd848decSrillig 	/* expect+1: warning: '4294967295 + 4294967295' overflows 'unsigned int' [141] */
33016f849b6Srillig 	u32 = 0xffffffffU + 0xffffffffU;
33116f849b6Srillig }
33216f849b6Srillig 
33316f849b6Srillig void
plus_s64(void)33416f849b6Srillig plus_s64(void)
33516f849b6Srillig {
336dd848decSrillig 	/* expect+1: warning: '-9223372036854775807 + -2' overflows 'long long' [141] */
33734885a59Srillig 	s64 = -0x7fffffffffffffffLL + -2LL;
33816f849b6Srillig 	s64 = -0x7fffffffffffffffLL + -1LL;
33916f849b6Srillig 	s64 = 0x7ffffffffffffffeLL + 1LL;
340dd848decSrillig 	/* expect+1: warning: '9223372036854775807 + 1' overflows 'long long' [141] */
34134885a59Srillig 	s64 = 0x7fffffffffffffffLL + 1LL;
34216f849b6Srillig }
34316f849b6Srillig 
34416f849b6Srillig void
plus_u64(void)34516f849b6Srillig plus_u64(void)
34616f849b6Srillig {
34716f849b6Srillig 	u64 = 0x0000000000000000ULL + 0x0000000000000000ULL;
34816f849b6Srillig 	u64 = 0xffffffffffffffffULL + 0x0000000000000000ULL;
34916f849b6Srillig 	u64 = 0x0000000000000000ULL + 0xffffffffffffffffULL;
35016f849b6Srillig 	u64 = 0xfffffffffffffffeULL + 0x0000000000000001ULL;
351dd848decSrillig 	/* expect+1: warning: '18446744073709551615 + 1' overflows 'unsigned long long' [141] */
35216f849b6Srillig 	u64 = 0xffffffffffffffffULL + 0x0000000000000001ULL;
353dd848decSrillig 	/* expect+1: warning: '1 + 18446744073709551615' overflows 'unsigned long long' [141] */
35416f849b6Srillig 	u64 = 0x0000000000000001ULL + 0xffffffffffffffffULL;
355dd848decSrillig 	/* expect+1: warning: '18446744073709551615 + 18446744073709551615' overflows 'unsigned long long' [141] */
35616f849b6Srillig 	u64 = 0xffffffffffffffffULL + 0xffffffffffffffffULL;
35716f849b6Srillig }
35816f849b6Srillig 
35916f849b6Srillig void
minus_s32(void)36016f849b6Srillig minus_s32(void)
36116f849b6Srillig {
362dd848decSrillig 	/* expect+1: warning: '-2147483647 - 2' overflows 'int' [141] */
36316f849b6Srillig 	s32 = -0x7fffffff - 2;
36416f849b6Srillig 	s32 = -0x7fffffff - 1;
36516f849b6Srillig 	s32 = -0x7fffffff - 1 - 0;
36616f849b6Srillig 	s32 = -0x7fffffff - 1 - -1;
36716f849b6Srillig 	s32 = 0x7fffffff - 0x7fffffff;
36816f849b6Srillig 	s32 = 0x7fffffff - 1;
36916f849b6Srillig 	s32 = 0x7fffffff - 0;
370dd848decSrillig 	/* expect+1: warning: '2147483647 - -1' overflows 'int' [141] */
37116f849b6Srillig 	s32 = 0x7fffffff - -1;
37216f849b6Srillig }
373cc3c7d5bSrillig 
37416f849b6Srillig void
minus_u32(void)37516f849b6Srillig minus_u32(void)
37616f849b6Srillig {
37716f849b6Srillig 	u32 = 0x00000000U - 0x00000000U;
378dd848decSrillig 	/* expect+1: warning: '0 - 1' overflows 'unsigned int' [141] */
37916f849b6Srillig 	u32 = 0x00000000U - 0x00000001U;
380dd848decSrillig 	/* expect+1: warning: '0 - 2147483648' overflows 'unsigned int' [141] */
38116f849b6Srillig 	u32 = 0x00000000U - 0x80000000U;
38216f849b6Srillig 	u32 = 0x80000000U - 0x00000001U;
383dd848decSrillig 	/* expect+1: warning: '0 - 4294967295' overflows 'unsigned int' [141] */
38416f849b6Srillig 	u32 = 0x00000000U - 0xffffffffU;
38516f849b6Srillig 	u32 = 0xffffffffU - 0x00000000U;
38616f849b6Srillig 	u32 = 0xffffffffU - 0xffffffffU;
38716f849b6Srillig }
388cc3c7d5bSrillig 
38916f849b6Srillig void
minus_s64(void)39016f849b6Srillig minus_s64(void)
39116f849b6Srillig {
392dd848decSrillig 	/* expect+1: warning: '-9223372036854775807 - 9223372036854775807' overflows 'long long' [141] */
39334885a59Srillig 	s64 = -0x7fffffffffffffffLL - 0x7fffffffffffffffLL;
394dd848decSrillig 	/* expect+1: warning: '-9223372036854775807 - 2' overflows 'long long' [141] */
39534885a59Srillig 	s64 = -0x7fffffffffffffffLL - 2LL;
39616f849b6Srillig 	s64 = -0x7fffffffffffffffLL - 1LL;
39716f849b6Srillig 	s64 = -0x7fffffffffffffffLL - 0LL;
39816f849b6Srillig 	s64 = -0x7fffffffffffffffLL - -1LL;
39916f849b6Srillig 	s64 = 0x7fffffffffffffffLL - 1LL;
40016f849b6Srillig 	s64 = 0x7fffffffffffffffLL - 0LL;
401dd848decSrillig 	/* expect+1: warning: '9223372036854775807 - -1' overflows 'long long' [141] */
40234885a59Srillig 	s64 = 0x7fffffffffffffffLL - -1LL;
403dd848decSrillig 	/* expect+1: warning: '9223372036854775807 - -9223372036854775807' overflows 'long long' [141] */
40434885a59Srillig 	s64 = 0x7fffffffffffffffLL - -0x7fffffffffffffffLL;
40516f849b6Srillig }
40616f849b6Srillig 
40716f849b6Srillig void
minus_u64(void)40816f849b6Srillig minus_u64(void)
40916f849b6Srillig {
410*8910413eSrillig 	u64 = 0x0000000000000000ULL - 0x0000000000000000ULL;
411*8910413eSrillig 	/* expect+1: warning: '0 - 1' overflows 'unsigned long long' [141] */
412*8910413eSrillig 	u64 = 0x0000000000000000ULL - 0x0000000000000001ULL;
413*8910413eSrillig 	/* expect+1: warning: '0 - 9223372036854775808' overflows 'unsigned long long' [141] */
414*8910413eSrillig 	u64 = 0x0000000000000000ULL - 0x8000000000000000ULL;
415*8910413eSrillig 	u64 = 0x8000000000000000ULL - 0x0000000000000001ULL;
416*8910413eSrillig 	/* expect+1: warning: '0 - 18446744073709551615' overflows 'unsigned long long' [141] */
417*8910413eSrillig 	u64 = 0x0000000000000000ULL - 0xffffffffffffffffULL;
418*8910413eSrillig 	u64 = 0xffffffffffffffffULL - 0x0000000000000000ULL;
419*8910413eSrillig 	u64 = 0xffffffffffffffffULL - 0xffffffffffffffffULL;
42016f849b6Srillig }
42116f849b6Srillig 
42216f849b6Srillig void
shl_s32(void)42316f849b6Srillig shl_s32(void)
42416f849b6Srillig {
425dd848decSrillig 	/* expect+1: warning: '256 << 23' overflows 'int' [141] */
42616f849b6Srillig 	s32 = 0x0100 << 23;
427dd848decSrillig 	/* expect+1: warning: '256 << 24' overflows 'int' [141] */
42816f849b6Srillig 	s32 = 0x0100 << 24;
42916f849b6Srillig 	/* expect+1: warning: shift amount 18446744073709551615 is greater than bit-size 32 of 'int' [122] */
43016f849b6Srillig 	s32 = 0 << 0xffffffffffffffff;
43116f849b6Srillig }
432cc3c7d5bSrillig 
43316f849b6Srillig void
shl_u32(void)43416f849b6Srillig shl_u32(void)
43516f849b6Srillig {
43616f849b6Srillig 	u32 = 0x0100U << 23;
437dd848decSrillig 	/* expect+1: warning: '256 << 24' overflows 'unsigned int' [141] */
43816f849b6Srillig 	u32 = 0x0100U << 24;
43916f849b6Srillig 	/* expect+1: warning: negative shift [121] */
44016f849b6Srillig 	u32 = 0x0000U << -1;
44116f849b6Srillig 	/* expect+1: warning: shift amount 256 is greater than bit-size 32 of 'unsigned int' [122] */
44216f849b6Srillig 	u32 = 0x0100U << 0x0100U;
44316f849b6Srillig 	/* expect+1: warning: shift amount 4294967295 is greater than bit-size 32 of 'unsigned int' [122] */
44416f849b6Srillig 	u32 = 0x0100U << 0xffffffffU;
44516f849b6Srillig 	/* expect+1: warning: shift amount 18446744073709551615 is greater than bit-size 32 of 'unsigned int' [122] */
44616f849b6Srillig 	u32 = 0x0100U << 0xffffffffffffffffULL;
44716f849b6Srillig }
448cc3c7d5bSrillig 
44916f849b6Srillig void
shl_s64(void)45016f849b6Srillig shl_s64(void)
45116f849b6Srillig {
452*8910413eSrillig 	s64 = 1LL << 62;
453*8910413eSrillig 	s64 = 1LL << 63;
454*8910413eSrillig 	/* expect+1: warning: shift amount 64 equals bit-size of 'long long' [267] */
455*8910413eSrillig 	s64 = 1LL << 64;
45616f849b6Srillig }
457cc3c7d5bSrillig 
45816f849b6Srillig void
shl_u64(void)45916f849b6Srillig shl_u64(void)
46016f849b6Srillig {
461*8910413eSrillig 	s64 = 1ULL << 62;
462*8910413eSrillig 	s64 = 1ULL << 63;
463*8910413eSrillig 	/* expect+1: warning: shift amount 64 equals bit-size of 'unsigned long long' [267] */
464*8910413eSrillig 	s64 = 1ULL << 64;
46516f849b6Srillig }
466cc3c7d5bSrillig 
46716f849b6Srillig void
shr_s32(void)46816f849b6Srillig shr_s32(void)
46916f849b6Srillig {
47016f849b6Srillig 	s32 = -0x7fffffff >> 1;
47116f849b6Srillig 	s32 = -10 >> 1;
47216f849b6Srillig 	s32 = -9 >> 1;
47316f849b6Srillig 	s32 = +9 >> 1;
47416f849b6Srillig 	s32 = +10 >> 1;
47516f849b6Srillig 	s32 = 0x7fffffff >> 1;
47608d1bd5cSrillig 
47708d1bd5cSrillig 	/* expect+1: error: negative array dimension (-16) [20] */
47808d1bd5cSrillig 	typedef int minus_32_shr_1[-32 >> 1];
47908d1bd5cSrillig 	/* expect+1: error: negative array dimension (-16) [20] */
48008d1bd5cSrillig 	typedef int minus_31_shr_1[-31 >> 1];
48108d1bd5cSrillig 	/* expect+1: error: negative array dimension (-15) [20] */
48208d1bd5cSrillig 	typedef int minus_30_shr_1[-30 >> 1];
48308d1bd5cSrillig 	/* expect+1: error: negative array dimension (-1) [20] */
48408d1bd5cSrillig 	typedef int minus_1_shr_1[-1 >> 31];
48516f849b6Srillig }
48616f849b6Srillig 
48716f849b6Srillig void
shr_u32(void)48816f849b6Srillig shr_u32(void)
48916f849b6Srillig {
49016f849b6Srillig 	u32 = 0xffffffffU >> 1;
49116f849b6Srillig 	/* expect+1: warning: shift amount 32 equals bit-size of 'unsigned int' [267] */
49216f849b6Srillig 	u32 = 0xffffffffU >> 32;
49316f849b6Srillig 	u32 = 0x00000000U >> 1;
49416f849b6Srillig }
49516f849b6Srillig 
49616f849b6Srillig void
shr_s64(void)49716f849b6Srillig shr_s64(void)
49816f849b6Srillig {
49916f849b6Srillig 	// TODO
50008d1bd5cSrillig 
50108d1bd5cSrillig 	/* expect+1: error: negative array dimension (-16) [20] */
502*8910413eSrillig 	typedef int minus_16_shr_0[-16LL >> 0];
50308d1bd5cSrillig 	/* expect+1: error: negative array dimension (-8) [20] */
504*8910413eSrillig 	typedef int minus_16_shr_1[-16LL >> 1];
50508d1bd5cSrillig 	/* expect+1: error: negative array dimension (-1) [20] */
506*8910413eSrillig 	typedef int minus_16_shr_16[-16LL >> 16];
50708d1bd5cSrillig 	/* expect+1: error: negative array dimension (-1) [20] */
508*8910413eSrillig 	typedef int minus_16_shr_40[-16LL >> 40];
50916f849b6Srillig }
51016f849b6Srillig 
51116f849b6Srillig void
shr_u64(void)51216f849b6Srillig shr_u64(void)
51316f849b6Srillig {
51416f849b6Srillig 	// TODO
51516f849b6Srillig }
51616f849b6Srillig 
51716f849b6Srillig void
compare_s32(void)51816f849b6Srillig compare_s32(void)
51916f849b6Srillig {
520*8910413eSrillig 	cond = 0x7fffffff <  (-0x7fffffff - 1);
521*8910413eSrillig 	cond = 0x7fffffff <= (-0x7fffffff - 1);
522*8910413eSrillig 	cond = 0x7fffffff >  (-0x7fffffff - 1);
523*8910413eSrillig 	cond = 0x7fffffff >= (-0x7fffffff - 1);
524*8910413eSrillig 	cond = 0x7fffffff == (-0x7fffffff - 1);
525*8910413eSrillig 	cond = 0x7fffffff != (-0x7fffffff - 1);
52616f849b6Srillig }
52716f849b6Srillig 
52816f849b6Srillig void
compare_u32(void)52916f849b6Srillig compare_u32(void)
53016f849b6Srillig {
531*8910413eSrillig 	cond = 0xffffffffU <  0x00000000U;
532*8910413eSrillig 	cond = 0xffffffffU <= 0x00000000U;
533*8910413eSrillig 	cond = 0xffffffffU >  0x00000000U;
534*8910413eSrillig 	cond = 0xffffffffU >= 0x00000000U;
535*8910413eSrillig 	cond = 0xffffffffU == 0x00000000U;
536*8910413eSrillig 	cond = 0xffffffffU != 0x00000000U;
53716f849b6Srillig }
53816f849b6Srillig 
53916f849b6Srillig void
compare_s64(void)54016f849b6Srillig compare_s64(void)
54116f849b6Srillig {
542*8910413eSrillig 	cond = 0x7fffffffffffffffLL <  (-0x7fffffffffffffffLL - 1);
543*8910413eSrillig 	cond = 0x7fffffffffffffffLL <= (-0x7fffffffffffffffLL - 1);
544*8910413eSrillig 	cond = 0x7fffffffffffffffLL >  (-0x7fffffffffffffffLL - 1);
545*8910413eSrillig 	cond = 0x7fffffffffffffffLL >= (-0x7fffffffffffffffLL - 1);
546*8910413eSrillig 	cond = 0x7fffffffffffffffLL == (-0x7fffffffffffffffLL - 1);
547*8910413eSrillig 	cond = 0x7fffffffffffffffLL != (-0x7fffffffffffffffLL - 1);
54816f849b6Srillig }
54916f849b6Srillig 
55016f849b6Srillig void
compare_u64(void)55116f849b6Srillig compare_u64(void)
55216f849b6Srillig {
553*8910413eSrillig 	cond = 0xffffffffffffffffULL <  0x0000000000000000ULL;
554*8910413eSrillig 	cond = 0xffffffffffffffffULL <= 0x0000000000000000ULL;
555*8910413eSrillig 	cond = 0xffffffffffffffffULL >  0x0000000000000000ULL;
556*8910413eSrillig 	cond = 0xffffffffffffffffULL >= 0x0000000000000000ULL;
557*8910413eSrillig 	cond = 0xffffffffffffffffULL == 0x0000000000000000ULL;
558*8910413eSrillig 	cond = 0xffffffffffffffffULL != 0x0000000000000000ULL;
55916f849b6Srillig }
56016f849b6Srillig 
56116f849b6Srillig void
bitand_s32(void)56216f849b6Srillig bitand_s32(void)
56316f849b6Srillig {
56416f849b6Srillig 	s32 = 0x55555555 & -0xff;
56516f849b6Srillig }
56616f849b6Srillig 
56716f849b6Srillig void
bitand_u32(void)56816f849b6Srillig bitand_u32(void)
56916f849b6Srillig {
57016f849b6Srillig 	u32 = 0xffffffffU & 0x55555555U;
57116f849b6Srillig 	u32 = 0x55555555U & 0xaaaaaaaaU;
57216f849b6Srillig }
57316f849b6Srillig 
57416f849b6Srillig void
bitand_s64(void)57516f849b6Srillig bitand_s64(void)
57616f849b6Srillig {
577*8910413eSrillig 	u64 = ~0x7fffeeeeddddccccLL & 0x1111222233334444LL;
57816f849b6Srillig }
57916f849b6Srillig 
58016f849b6Srillig void
bitand_u64(void)58116f849b6Srillig bitand_u64(void)
58216f849b6Srillig {
583*8910413eSrillig 	u64 = 0xffffeeeeddddccccULL & 0x1111222233334444ULL;
58416f849b6Srillig }
58516f849b6Srillig 
58616f849b6Srillig void
bitxor_s32(void)58716f849b6Srillig bitxor_s32(void)
58816f849b6Srillig {
58916f849b6Srillig 	s32 = 0x12345678 ^ 0x76543210;
59016f849b6Srillig }
59116f849b6Srillig 
59216f849b6Srillig void
bitxor_u32(void)59316f849b6Srillig bitxor_u32(void)
59416f849b6Srillig {
59516f849b6Srillig 	u32 = 0xffffffffU ^ 0x55555555U;
59616f849b6Srillig 	u32 = 0x55555555U ^ 0xaaaaaaaaU;
59716f849b6Srillig }
59816f849b6Srillig 
59916f849b6Srillig void
bitxor_s64(void)60016f849b6Srillig bitxor_s64(void)
60116f849b6Srillig {
602*8910413eSrillig 	s64 = ~0x123456789abcdef0LL ^ 0x0123456789abcdefLL;
60316f849b6Srillig }
60416f849b6Srillig 
60516f849b6Srillig void
bitxor_u64(void)60616f849b6Srillig bitxor_u64(void)
60716f849b6Srillig {
608*8910413eSrillig 	u64 = 0xfedcba9876543210ULL ^ 0x0123456789abcdefULL;
60916f849b6Srillig }
61016f849b6Srillig 
61116f849b6Srillig void
bitor_s32(void)61216f849b6Srillig bitor_s32(void)
61316f849b6Srillig {
61416f849b6Srillig 	s32 = 0x3333cccc | 0x5555aaaa;
61516f849b6Srillig }
61616f849b6Srillig 
61716f849b6Srillig void
bitor_u32(void)61816f849b6Srillig bitor_u32(void)
61916f849b6Srillig {
62016f849b6Srillig 	u32 = 0xffffffffU | 0x00000000U;
62116f849b6Srillig 	u32 = 0xffffffffU | 0xffffffffU;
62216f849b6Srillig 	u32 = 0x55555555U | 0xaaaaaaaaU;
62316f849b6Srillig }
62416f849b6Srillig 
62516f849b6Srillig void
bitor_s64(void)62616f849b6Srillig bitor_s64(void)
62716f849b6Srillig {
628*8910413eSrillig 	s64 = 0x1111222233334444LL | ~0x0000111122223333LL;
62916f849b6Srillig }
63016f849b6Srillig 
63116f849b6Srillig void
bitor_u64(void)63216f849b6Srillig bitor_u64(void)
63316f849b6Srillig {
634*8910413eSrillig 	u64 = 0x1111222233334444ULL | 0xffffeeeeddddccccULL;
63516f849b6Srillig }
636