xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_218.c (revision 5357c932abfce44e67c9ba5bdae0bd58daa00a9c)
1*5357c932Srillig /*	$NetBSD: msg_218.c,v 1.10 2024/01/28 06:57:41 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_218.c"
3a0a15c14Srillig 
4dcb32fd7Srillig /* Test for message: C90 treats constant as unsigned, op '%s' [218] */
5a0a15c14Srillig 
640a9b8fdSrillig /* lint1-only-if: ilp32 */
71d1794a8Srillig /* lint1-flags: -w -X 351 */
840a9b8fdSrillig 
91d1794a8Srillig int cond;
10a44d0c31Srillig signed int s32;
11a44d0c31Srillig unsigned int u32;
121d1794a8Srillig /* expect+1: warning: C90 does not support 'long long' [265] */
13a44d0c31Srillig signed long long s64;
141d1794a8Srillig /* expect+1: warning: C90 does not support 'long long' [265] */
15a44d0c31Srillig unsigned long long u64;
16a44d0c31Srillig 
1740a9b8fdSrillig void sink_int(int);
1840a9b8fdSrillig 
1940a9b8fdSrillig /* All platforms supported by lint have 32-bit int in two's complement. */
2040a9b8fdSrillig void
test_signed_int(void)2140a9b8fdSrillig test_signed_int(void)
2240a9b8fdSrillig {
23*5357c932Srillig 	/* expect+3: warning: integer constant out of range [252] */
24dcb32fd7Srillig 	/* expect+2: warning: C90 treats constant as unsigned, op '-' [218] */
2540a9b8fdSrillig 	/* expect+1: warning: conversion of 'unsigned long' to 'int' is out of range, arg #1 [295] */
2640a9b8fdSrillig 	sink_int(-2147483648);
2740a9b8fdSrillig }
28a44d0c31Srillig 
29a44d0c31Srillig /*
30*5357c932Srillig  * TODO: Investigate whether the message 218 is actually correct.
31*5357c932Srillig  * See C1978 2.4.1 "Integer constants" and 6.6 "Arithmetic conversions".
32a44d0c31Srillig  */
33a44d0c31Srillig void
compare_large_constant(void)34a44d0c31Srillig compare_large_constant(void)
35a44d0c31Srillig {
36*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
37dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
38a44d0c31Srillig 	cond = s32 < 3000000000L;
39*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
40dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
41a44d0c31Srillig 	cond = 3000000000L < s32;
42*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
43dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
44a44d0c31Srillig 	cond = u32 < 3000000000L;
45*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
46dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
47a44d0c31Srillig 	cond = 3000000000L < u32;
48*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
49dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
50a44d0c31Srillig 	cond = s64 < 3000000000L;
51*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
52dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
53a44d0c31Srillig 	cond = 3000000000L < s64;
54*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
55dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
56a44d0c31Srillig 	cond = u64 < 3000000000L;
57*5357c932Srillig 	/* expect+2: warning: integer constant out of range [252] */
58dcb32fd7Srillig 	/* expect+1: warning: C90 treats constant as unsigned, op '<' [218] */
59a44d0c31Srillig 	cond = 3000000000L < u64;
60a44d0c31Srillig }
61