lex_integer.c revision 1.8
11.8Srillig/* $NetBSD: lex_integer.c,v 1.8 2021/08/28 20:51:10 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.8Srillig /* expect+1: passing 'int' */ 281.8Srillig print_type(0); 291.8Srillig /* The '-' is not part of the constant, it's a unary operator. */ 301.8Srillig /* expect+1: passing 'int' */ 311.8Srillig print_type(-1); 321.8Srillig /* expect+1: passing 'int' */ 331.8Srillig print_type(2147483647); 341.8Srillig /* expect+1: passing 'int' */ 351.8Srillig print_type(0x7fffffff); 361.8Srillig 371.8Srillig /* expect+1: passing 'unsigned int' */ 381.8Srillig print_type(0x80000000); 391.8Srillig /* expect+1: passing 'unsigned int' */ 401.8Srillig print_type(0xffffffff); 411.8Srillig 421.8Srillig /* expect+1: passing 'long' */ 431.8Srillig print_type(2147483648); 441.8Srillig /* expect+1: passing 'long' */ 451.8Srillig print_type(0x0000000100000000); 461.8Srillig /* expect+1: passing 'long' */ 471.8Srillig print_type(0x7fffffffffffffff); 481.8Srillig 491.8Srillig /* expect+1: passing 'unsigned long' */ 501.8Srillig print_type(0x8000000000000000); 511.8Srillig /* expect+1: passing 'unsigned long' */ 521.8Srillig print_type(0xffffffffffffffff); 531.8Srillig 541.8Srillig /* expect+2: warning: integer constant out of range [252] */ 551.8Srillig /* expect+1: warning: passing 'unsigned long' */ 561.8Srillig print_type(0x00010000000000000000); 571.8Srillig} 581.1Srillig 591.8Srilligvoid 601.8Srilligsuffix_u(void) 611.8Srillig{ 621.8Srillig /* expect+1: passing 'unsigned int' */ 631.8Srillig print_type(3U); 641.8Srillig /* expect+1: passing 'unsigned int' */ 651.8Srillig print_type(3u); 661.8Srillig 671.8Srillig /* expect+1: passing 'unsigned int' */ 681.8Srillig print_type(4294967295U); 691.8Srillig /* expect+1: passing 'unsigned long' */ 701.8Srillig print_type(4294967296U); 711.8Srillig} 721.1Srillig 731.8Srilligvoid 741.8Srilligsuffix_l(void) 751.8Srillig{ 761.8Srillig /* expect+1: passing 'long' */ 771.8Srillig print_type(3L); 781.1Srillig 791.8Srillig /* expect+1: passing 'long' */ 801.8Srillig print_type(3l); 811.8Srillig} 821.1Srillig 831.8Srilligvoid 841.8Srilligsuffix_ul(void) 851.8Srillig{ 861.8Srillig /* expect+1: passing 'unsigned long' */ 871.8Srillig print_type(3UL); 881.8Srillig /* expect+1: passing 'unsigned long' */ 891.8Srillig print_type(3LU); 901.1Srillig} 911.1Srillig 921.1Srilligvoid 931.8Srilligsuffix_ll(void) 941.1Srillig{ 951.8Srillig /* expect+1: passing 'long long' */ 961.8Srillig print_type(3LL); 971.1Srillig 981.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 991.8Srillig /* expect+1: passing 'long long' */ 1001.8Srillig print_type(3Ll); 1011.1Srillig 1021.8Srillig /* expect+1: passing 'long long' */ 1031.8Srillig print_type(3ll); 1041.1Srillig} 1051.5Srillig 1061.5Srilligvoid 1071.8Srilligsuffix_ull(void) 1081.5Srillig{ 1091.8Srillig /* expect+1: passing 'unsigned long long' */ 1101.8Srillig print_type(3llu); 1111.8Srillig /* expect+1: passing 'unsigned long long' */ 1121.8Srillig print_type(3Ull); 1131.5Srillig 1141.5Srillig /* The 'LL' must not be split. Checked by the compiler. */ 1151.8Srillig /* expect+1: passing 'unsigned long long' */ 1161.8Srillig print_type(3lul); 1171.8Srillig 1181.8Srillig /* The 'Ll' must not use mixed case. Checked by the compiler. */ 1191.8Srillig /* expect+1: passing 'unsigned long long' */ 1201.8Srillig print_type(3ULl); 1211.8Srillig} 1221.8Srillig 1231.8Srilligvoid 1241.8Srilligsuffix_too_many(void) 1251.8Srillig{ 1261.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1271.8Srillig /* expect+1: passing 'long long' */ 1281.8Srillig print_type(3LLL); 1291.8Srillig 1301.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1311.8Srillig /* expect+1: passing 'unsigned int' */ 1321.8Srillig print_type(3uu); 1331.5Srillig} 1341.6Srillig 1351.6Srillig/* https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html */ 1361.6Srilligvoid 1371.6Srilligbinary_literal(void) 1381.6Srillig{ 1391.8Srillig /* This is a GCC extension, but lint doesn't know that. */ 1401.8Srillig /* expect+1: passing 'int' */ 1411.8Srillig print_type(0b1111000001011010); 1421.8Srillig 1431.8Srillig /* expect+1: passing 'unsigned int' */ 1441.8Srillig print_type(0b11110000111100001111000011110000); 1451.6Srillig} 146