lex_integer.c revision 1.9
11.9Srillig/* $NetBSD: lex_integer.c,v 1.9 2021/08/28 21:01: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.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.9Srillig /* The '-' is not part of the constant, it is a unary operator. */ 301.8Srillig /* expect+1: passing 'int' */ 311.8Srillig print_type(-1); 321.9Srillig 331.8Srillig /* expect+1: passing 'int' */ 341.8Srillig print_type(2147483647); 351.8Srillig /* expect+1: passing 'int' */ 361.8Srillig print_type(0x7fffffff); 371.9Srillig /* expect+1: passing 'int' */ 381.9Srillig print_type(017777777777); 391.8Srillig 401.8Srillig /* expect+1: passing 'unsigned int' */ 411.8Srillig print_type(0x80000000); 421.8Srillig /* expect+1: passing 'unsigned int' */ 431.9Srillig print_type(020000000000); 441.9Srillig /* expect+1: passing 'unsigned int' */ 451.8Srillig print_type(0xffffffff); 461.8Srillig 471.8Srillig /* expect+1: passing 'long' */ 481.8Srillig print_type(2147483648); 491.8Srillig /* expect+1: passing 'long' */ 501.8Srillig print_type(0x0000000100000000); 511.8Srillig /* expect+1: passing 'long' */ 521.8Srillig print_type(0x7fffffffffffffff); 531.8Srillig 541.8Srillig /* expect+1: passing 'unsigned long' */ 551.8Srillig print_type(0x8000000000000000); 561.8Srillig /* expect+1: passing 'unsigned long' */ 571.8Srillig print_type(0xffffffffffffffff); 581.8Srillig 591.8Srillig /* expect+2: warning: integer constant out of range [252] */ 601.8Srillig /* expect+1: warning: passing 'unsigned long' */ 611.8Srillig print_type(0x00010000000000000000); 621.8Srillig} 631.1Srillig 641.8Srilligvoid 651.8Srilligsuffix_u(void) 661.8Srillig{ 671.8Srillig /* expect+1: passing 'unsigned int' */ 681.8Srillig print_type(3U); 691.8Srillig /* expect+1: passing 'unsigned int' */ 701.8Srillig print_type(3u); 711.8Srillig 721.8Srillig /* expect+1: passing 'unsigned int' */ 731.8Srillig print_type(4294967295U); 741.8Srillig /* expect+1: passing 'unsigned long' */ 751.8Srillig print_type(4294967296U); 761.8Srillig} 771.1Srillig 781.8Srilligvoid 791.8Srilligsuffix_l(void) 801.8Srillig{ 811.8Srillig /* expect+1: passing 'long' */ 821.8Srillig print_type(3L); 831.1Srillig 841.8Srillig /* expect+1: passing 'long' */ 851.8Srillig print_type(3l); 861.8Srillig} 871.1Srillig 881.8Srilligvoid 891.8Srilligsuffix_ul(void) 901.8Srillig{ 911.8Srillig /* expect+1: passing 'unsigned long' */ 921.8Srillig print_type(3UL); 931.8Srillig /* expect+1: passing 'unsigned long' */ 941.8Srillig print_type(3LU); 951.1Srillig} 961.1Srillig 971.1Srilligvoid 981.8Srilligsuffix_ll(void) 991.1Srillig{ 1001.8Srillig /* 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.8Srillig /* expect+1: passing 'long long' */ 1051.8Srillig print_type(3Ll); 1061.1Srillig 1071.8Srillig /* expect+1: passing 'long long' */ 1081.8Srillig print_type(3ll); 1091.1Srillig} 1101.5Srillig 1111.5Srilligvoid 1121.8Srilligsuffix_ull(void) 1131.5Srillig{ 1141.8Srillig /* expect+1: passing 'unsigned long long' */ 1151.8Srillig print_type(3llu); 1161.8Srillig /* 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.8Srillig /* 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.8Srillig /* 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.8Srillig /* expect+1: passing 'long long' */ 1331.8Srillig print_type(3LLL); 1341.8Srillig 1351.8Srillig /* expect+2: warning: malformed integer constant [251] */ 1361.8Srillig /* 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.8Srillig /* expect+1: passing 'int' */ 1461.8Srillig print_type(0b1111000001011010); 1471.8Srillig 1481.8Srillig /* expect+1: passing 'unsigned int' */ 1491.8Srillig print_type(0b11110000111100001111000011110000); 1501.6Srillig} 151