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)26d310c001Srilligno_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)66d310c001Srilligsuffix_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)80d310c001Srilligsuffix_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)90d310c001Srilligsuffix_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)99d310c001Srilligsuffix_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)113d310c001Srilligsuffix_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)130d310c001Srilligsuffix_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)14374ecc892Srilligbinary_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