xref: /netbsd-src/tests/usr.bin/xlint/lint1/lex_integer.c (revision b2baa50111d645353fa30b4deab0f79d93650c8c)
1*b2baa501Srillig /*	$NetBSD: lex_integer.c,v 1.11 2023/03/28 14:44:34 rillig Exp $	*/
23ce615ebSrillig # 3 "lex_integer.c"
33ce615ebSrillig 
43ce615ebSrillig /*
53ce615ebSrillig  * Tests for lexical analysis of integer constants.
63ce615ebSrillig  *
73ce615ebSrillig  * C99 6.4.4.1 "Integer constants"
83ce615ebSrillig  */
93ce615ebSrillig 
10dadd5dc3Srillig /* lint1-only-if: lp64 */
11*b2baa501Srillig /* lint1-extra-flags: -X 351 */
1223e91a74Srillig 
13d310c001Srillig long signed_long;
14d310c001Srillig unsigned long long unsigned_long_long_var;
153ce615ebSrillig 
16d310c001Srillig struct s {
17d310c001Srillig 	int member;
18d310c001Srillig };
19d310c001Srillig /*
20d310c001Srillig  * When lint tries to convert the argument to 'struct s', it prints the
21d310c001Srillig  * actual type of the argument as a side effect.
22d310c001Srillig  */
23d310c001Srillig void print_type(struct s);
24d310c001Srillig 
253ce615ebSrillig void
no_suffix(void)26d310c001Srillig no_suffix(void)
273ce615ebSrillig {
28c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
29d310c001Srillig 	print_type(0);
303ee62defSrillig 	/* The '-' is not part of the constant, it is a unary operator. */
31c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
32d310c001Srillig 	print_type(-1);
333ee62defSrillig 
34c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
35d310c001Srillig 	print_type(2147483647);
36c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
37d310c001Srillig 	print_type(0x7fffffff);
38c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
393ee62defSrillig 	print_type(017777777777);
403ce615ebSrillig 
41c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
42d310c001Srillig 	print_type(0x80000000);
43c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
443ee62defSrillig 	print_type(020000000000);
45c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
46d310c001Srillig 	print_type(0xffffffff);
473ce615ebSrillig 
48c83f7defSrillig 	/* expect+1: ... passing 'long' ... */
49d310c001Srillig 	print_type(2147483648);
50c83f7defSrillig 	/* expect+1: ... passing 'long' ... */
51d310c001Srillig 	print_type(0x0000000100000000);
52c83f7defSrillig 	/* expect+1: ... passing 'long' ... */
53d310c001Srillig 	print_type(0x7fffffffffffffff);
543ce615ebSrillig 
55c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
56d310c001Srillig 	print_type(0x8000000000000000);
57c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
58d310c001Srillig 	print_type(0xffffffffffffffff);
593ce615ebSrillig 
60d310c001Srillig 	/* expect+2: warning: integer constant out of range [252] */
61c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
62d310c001Srillig 	print_type(0x00010000000000000000);
633ce615ebSrillig }
643ce615ebSrillig 
653ce615ebSrillig void
suffix_u(void)66d310c001Srillig suffix_u(void)
673ce615ebSrillig {
68c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
69d310c001Srillig 	print_type(3U);
70c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
71d310c001Srillig 	print_type(3u);
723ce615ebSrillig 
73c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
74d310c001Srillig 	print_type(4294967295U);
75c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
76d310c001Srillig 	print_type(4294967296U);
773ce615ebSrillig }
78e083f2dcSrillig 
79d310c001Srillig void
suffix_l(void)80d310c001Srillig suffix_l(void)
81d310c001Srillig {
82c83f7defSrillig 	/* expect+1: ... passing 'long' ... */
83d310c001Srillig 	print_type(3L);
84d310c001Srillig 
85c83f7defSrillig 	/* expect+1: ... passing 'long' ... */
86d310c001Srillig 	print_type(3l);
87d310c001Srillig }
88e083f2dcSrillig 
89e083f2dcSrillig void
suffix_ul(void)90d310c001Srillig suffix_ul(void)
91e083f2dcSrillig {
92c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
93d310c001Srillig 	print_type(3UL);
94c83f7defSrillig 	/* expect+1: ... passing 'unsigned long' ... */
95d310c001Srillig 	print_type(3LU);
96d310c001Srillig }
97d310c001Srillig 
98d310c001Srillig void
suffix_ll(void)99d310c001Srillig suffix_ll(void)
100d310c001Srillig {
101c83f7defSrillig 	/* expect+1: ... passing 'long long' ... */
102d310c001Srillig 	print_type(3LL);
103d310c001Srillig 
104d310c001Srillig 	/* The 'Ll' must not use mixed case. Checked by the compiler. */
105c83f7defSrillig 	/* expect+1: ... passing 'long long' ... */
106d310c001Srillig 	print_type(3Ll);
107d310c001Srillig 
108c83f7defSrillig 	/* expect+1: ... passing 'long long' ... */
109d310c001Srillig 	print_type(3ll);
110d310c001Srillig }
111d310c001Srillig 
112d310c001Srillig void
suffix_ull(void)113d310c001Srillig suffix_ull(void)
114d310c001Srillig {
115c83f7defSrillig 	/* expect+1: ... passing 'unsigned long long' ... */
116d310c001Srillig 	print_type(3llu);
117c83f7defSrillig 	/* expect+1: ... passing 'unsigned long long' ... */
118d310c001Srillig 	print_type(3Ull);
119e083f2dcSrillig 
120e083f2dcSrillig 	/* The 'LL' must not be split. Checked by the compiler. */
121c83f7defSrillig 	/* expect+1: ... passing 'unsigned long long' ... */
122d310c001Srillig 	print_type(3lul);
123d310c001Srillig 
124d310c001Srillig 	/* The 'Ll' must not use mixed case. Checked by the compiler. */
125c83f7defSrillig 	/* expect+1: ... passing 'unsigned long long' ... */
126d310c001Srillig 	print_type(3ULl);
127d310c001Srillig }
128d310c001Srillig 
129d310c001Srillig void
suffix_too_many(void)130d310c001Srillig suffix_too_many(void)
131d310c001Srillig {
132d310c001Srillig 	/* expect+2: warning: malformed integer constant [251] */
133c83f7defSrillig 	/* expect+1: ... passing 'long long' ... */
134d310c001Srillig 	print_type(3LLL);
135d310c001Srillig 
136d310c001Srillig 	/* expect+2: warning: malformed integer constant [251] */
137c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
138d310c001Srillig 	print_type(3uu);
139e083f2dcSrillig }
14074ecc892Srillig 
14174ecc892Srillig /* https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html */
14274ecc892Srillig void
binary_literal(void)14374ecc892Srillig binary_literal(void)
14474ecc892Srillig {
145d310c001Srillig 	/* This is a GCC extension, but lint doesn't know that. */
146c83f7defSrillig 	/* expect+1: ... passing 'int' ... */
147d310c001Srillig 	print_type(0b1111000001011010);
148d310c001Srillig 
149c83f7defSrillig 	/* expect+1: ... passing 'unsigned int' ... */
150d310c001Srillig 	print_type(0b11110000111100001111000011110000);
15174ecc892Srillig }
152