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