lex_integer.c revision 1.10
11.10Srillig/* $NetBSD: lex_integer.c,v 1.10 2022/06/17 18:54:53 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.2Srillig 121.8Srilliglong signed_long; 131.8Srilligunsigned long long unsigned_long_long_var; 141.8Srillig 151.8Srilligstruct s { 161.8Srillig int member; 171.8Srillig}; 181.8Srillig/* 191.8Srillig * When lint tries to convert the argument to 'struct s', it prints the 201.8Srillig * actual type of the argument as a side effect. 211.8Srillig */ 221.8Srilligvoid print_type(struct s); 231.1Srillig 241.1Srilligvoid 251.8Srilligno_suffix(void) 261.1Srillig{ 271.10Srillig /* expect+1: ... passing 'int' ... */ 281.8Srillig print_type(0); 291.9Srillig /* The '-' is not part of the constant, it is a unary operator. */ 301.10Srillig /* expect+1: ... passing 'int' ... */ 311.8Srillig print_type(-1); 321.9Srillig 331.10Srillig /* expect+1: ... passing 'int' ... */ 341.8Srillig print_type(2147483647); 351.10Srillig /* expect+1: ... passing 'int' ... */ 361.8Srillig print_type(0x7fffffff); 371.10Srillig /* expect+1: ... passing 'int' ... */ 381.9Srillig print_type(017777777777); 391.8Srillig 401.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 411.8Srillig print_type(0x80000000); 421.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 431.9Srillig print_type(020000000000); 441.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 451.8Srillig print_type(0xffffffff); 461.8Srillig 471.10Srillig /* expect+1: ... passing 'long' ... */ 481.8Srillig print_type(2147483648); 491.10Srillig /* expect+1: ... passing 'long' ... */ 501.8Srillig print_type(0x0000000100000000); 511.10Srillig /* expect+1: ... passing 'long' ... */ 521.8Srillig print_type(0x7fffffffffffffff); 531.8Srillig 541.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 551.8Srillig print_type(0x8000000000000000); 561.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 571.8Srillig print_type(0xffffffffffffffff); 581.8Srillig 591.8Srillig /* expect+2: warning: integer constant out of range [252] */ 601.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 611.8Srillig print_type(0x00010000000000000000); 621.8Srillig} 631.1Srillig 641.8Srilligvoid 651.8Srilligsuffix_u(void) 661.8Srillig{ 671.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 681.8Srillig print_type(3U); 691.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 701.8Srillig print_type(3u); 711.8Srillig 721.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 731.8Srillig print_type(4294967295U); 741.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 751.8Srillig print_type(4294967296U); 761.8Srillig} 771.1Srillig 781.8Srilligvoid 791.8Srilligsuffix_l(void) 801.8Srillig{ 811.10Srillig /* expect+1: ... passing 'long' ... */ 821.8Srillig print_type(3L); 831.1Srillig 841.10Srillig /* expect+1: ... passing 'long' ... */ 851.8Srillig print_type(3l); 861.8Srillig} 871.1Srillig 881.8Srilligvoid 891.8Srilligsuffix_ul(void) 901.8Srillig{ 911.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 921.8Srillig print_type(3UL); 931.10Srillig /* expect+1: ... passing 'unsigned long' ... */ 941.8Srillig print_type(3LU); 951.1Srillig} 961.1Srillig 971.1Srilligvoid 981.8Srilligsuffix_ll(void) 991.1Srillig{ 1001.10Srillig /* expect+1: ... passing 'long long' ... */ 1011.8Srillig print_type(3LL); 1021.1Srillig 1031.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 1041.10Srillig /* expect+1: ... passing 'long long' ... */ 1051.8Srillig print_type(3Ll); 1061.1Srillig 1071.10Srillig /* expect+1: ... passing 'long long' ... */ 1081.8Srillig print_type(3ll); 1091.1Srillig} 1101.5Srillig 1111.5Srilligvoid 1121.8Srilligsuffix_ull(void) 1131.5Srillig{ 1141.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1151.8Srillig print_type(3llu); 1161.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1171.8Srillig print_type(3Ull); 1181.5Srillig 1191.5Srillig /* The 'LL' must not be split. Checked by the compiler. */ 1201.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1211.8Srillig print_type(3lul); 1221.8Srillig 1231.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 1241.10Srillig /* expect+1: ... passing 'unsigned long long' ... */ 1251.8Srillig print_type(3ULl); 1261.8Srillig} 1271.8Srillig 1281.8Srilligvoid 1291.8Srilligsuffix_too_many(void) 1301.8Srillig{ 1311.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1321.10Srillig /* expect+1: ... passing 'long long' ... */ 1331.8Srillig print_type(3LLL); 1341.8Srillig 1351.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1361.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 1371.8Srillig print_type(3uu); 1381.5Srillig} 1391.6Srillig 1401.6Srillig/* https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html */ 1411.6Srilligvoid 1421.6Srilligbinary_literal(void) 1431.6Srillig{ 1441.8Srillig /* This is a GCC extension, but lint doesn't know that. */ 1451.10Srillig /* expect+1: ... passing 'int' ... */ 1461.8Srillig print_type(0b1111000001011010); 1471.8Srillig 1481.10Srillig /* expect+1: ... passing 'unsigned int' ... */ 1491.8Srillig print_type(0b11110000111100001111000011110000); 1501.6Srillig} 151