11.11Srillig/* $NetBSD: lex_integer.c,v 1.11 2023/03/28 14:44:34 rillig Exp $ */ 21.1Srillig# 3 "lex_integer.c" 31.1Srillig 41.1Srillig/* 51.1Srillig * Tests for lexical analysis of integer constants. 61.1Srillig * 71.1Srillig * C99 6.4.4.1 "Integer constants" 81.1Srillig */ 91.1Srillig 101.7Srillig/* lint1-only-if: lp64 */ 111.11Srillig/* lint1-extra-flags: -X 351 */ 121.2Srillig 131.8Srilliglong signed_long; 141.8Srilligunsigned long long unsigned_long_long_var; 151.8Srillig 161.8Srilligstruct s { 171.8Srillig int member; 181.8Srillig}; 191.8Srillig/* 201.8Srillig * When lint tries to convert the argument to 'struct s', it prints the 211.8Srillig * actual type of the argument as a side effect. 221.8Srillig */ 231.8Srilligvoid print_type(struct s); 241.1Srillig 251.1Srilligvoid 261.8Srilligno_suffix(void) 271.1Srillig{ 281.10Srillig /* expect+1: ... passing 'int' ... */ 291.8Srillig print_type(0); 301.9Srillig /* The '-' is not part of the constant, it is a unary operator. */ 311.10Srillig /* expect+1: ... passing 'int' ... */ 321.8Srillig print_type(-1); 331.9Srillig 341.10Srillig /* expect+1: ... passing 'int' ... */ 351.8Srillig print_type(2147483647); 361.10Srillig /* expect+1: ... passing 'int' ... */ 371.8Srillig print_type(0x7fffffff); 381.10Srillig /* expect+1: ... passing 'int' ... */ 391.9Srillig print_type(017777777777); 401.8Srillig 411.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 421.8Srillig print_type(0x80000000); 431.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 441.9Srillig print_type(020000000000); 451.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 461.8Srillig print_type(0xffffffff); 471.8Srillig 481.10Srillig /* expect+1: ... passing 'long' ... */ 491.8Srillig print_type(2147483648); 501.10Srillig /* expect+1: ... passing 'long' ... */ 511.8Srillig print_type(0x0000000100000000); 521.10Srillig /* expect+1: ... passing 'long' ... */ 531.8Srillig print_type(0x7fffffffffffffff); 541.8Srillig 551.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 561.8Srillig print_type(0x8000000000000000); 571.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 581.8Srillig print_type(0xffffffffffffffff); 591.8Srillig 601.8Srillig /* expect+2: warning: integer constant out of range [252] */ 611.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 621.8Srillig print_type(0x00010000000000000000); 631.8Srillig} 641.1Srillig 651.8Srilligvoid 661.8Srilligsuffix_u(void) 671.8Srillig{ 681.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 691.8Srillig print_type(3U); 701.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 711.8Srillig print_type(3u); 721.8Srillig 731.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 741.8Srillig print_type(4294967295U); 751.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 761.8Srillig print_type(4294967296U); 771.8Srillig} 781.1Srillig 791.8Srilligvoid 801.8Srilligsuffix_l(void) 811.8Srillig{ 821.10Srillig /* expect+1: ... passing 'long' ... */ 831.8Srillig print_type(3L); 841.1Srillig 851.10Srillig /* expect+1: ... passing 'long' ... */ 861.8Srillig print_type(3l); 871.8Srillig} 881.1Srillig 891.8Srilligvoid 901.8Srilligsuffix_ul(void) 911.8Srillig{ 921.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 931.8Srillig print_type(3UL); 941.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 951.8Srillig print_type(3LU); 961.1Srillig} 971.1Srillig 981.1Srilligvoid 991.8Srilligsuffix_ll(void) 1001.1Srillig{ 1011.10Srillig /* expect+1: ... passing 'long long' ... */ 1021.8Srillig print_type(3LL); 1031.1Srillig 1041.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 1051.10Srillig /* expect+1: ... passing 'long long' ... */ 1061.8Srillig print_type(3Ll); 1071.1Srillig 1081.10Srillig /* expect+1: ... passing 'long long' ... */ 1091.8Srillig print_type(3ll); 1101.1Srillig} 1111.5Srillig 1121.5Srilligvoid 1131.8Srilligsuffix_ull(void) 1141.5Srillig{ 1151.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1161.8Srillig print_type(3llu); 1171.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1181.8Srillig print_type(3Ull); 1191.5Srillig 1201.5Srillig /* The 'LL' must not be split. Checked by the compiler. */ 1211.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1221.8Srillig print_type(3lul); 1231.8Srillig 1241.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 1251.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1261.8Srillig print_type(3ULl); 1271.8Srillig} 1281.8Srillig 1291.8Srilligvoid 1301.8Srilligsuffix_too_many(void) 1311.8Srillig{ 1321.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1331.10Srillig /* expect+1: ... passing 'long long' ... */ 1341.8Srillig print_type(3LLL); 1351.8Srillig 1361.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1371.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 1381.8Srillig print_type(3uu); 1391.5Srillig} 1401.6Srillig 1411.6Srillig/* https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html */ 1421.6Srilligvoid 1431.6Srilligbinary_literal(void) 1441.6Srillig{ 1451.8Srillig /* This is a GCC extension, but lint doesn't know that. */ 1461.10Srillig /* expect+1: ... passing 'int' ... */ 1471.8Srillig print_type(0b1111000001011010); 1481.8Srillig 1491.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 1501.8Srillig print_type(0b11110000111100001111000011110000); 1511.6Srillig} 152