1*6f6b09efSrillig /* $NetBSD: expr_fold_strict_bool.c,v 1.3 2024/06/08 09:09:20 rillig Exp $ */ 23065c1c3Srillig # 3 "expr_fold_strict_bool.c" 33065c1c3Srillig 43065c1c3Srillig /* 53065c1c3Srillig * Test constant folding in strict bool mode. 63065c1c3Srillig * 73065c1c3Srillig * In this mode, _Bool is not an unsigned integer type. In fact, it is not 83065c1c3Srillig * an arithmetic type at all. 93065c1c3Srillig */ 103065c1c3Srillig 113065c1c3Srillig /* lint1-extra-flags: -T */ 123065c1c3Srillig 133065c1c3Srillig typedef long long int64_t; 143065c1c3Srillig typedef unsigned long long uint64_t; 153065c1c3Srillig 163065c1c3Srillig struct fold_64_bit { 173065c1c3Srillig 183065c1c3Srillig _Bool lt_signed_small_ok: -3LL < 1LL ? 1 : -1; 193065c1c3Srillig /* expect+1: error: illegal bit-field size: 255 [36] */ 203065c1c3Srillig _Bool lt_signed_small_bad: 1LL < -3LL ? 1 : -1; 213065c1c3Srillig 223065c1c3Srillig _Bool lt_signed_big_ok: (int64_t)(1ULL << 63) < 1LL ? 1 : -1; 233065c1c3Srillig /* expect+1: error: illegal bit-field size: 255 [36] */ 243065c1c3Srillig _Bool lt_signed_big_bad: 1LL < (int64_t)(1ULL << 63) ? 1 : -1; 253065c1c3Srillig 263065c1c3Srillig _Bool lt_unsigned_small_ok: 1ULL < 3ULL ? 1 : -1; 273065c1c3Srillig /* expect+1: error: illegal bit-field size: 255 [36] */ 283065c1c3Srillig _Bool lt_unsigned_small_bad: 3ULL < 1ULL ? 1 : -1; 293065c1c3Srillig 30a8096716Srillig /* 31a8096716Srillig * Before tree.c 1.345 from 2021-08-22, lint wrongly assumed that the 32a8096716Srillig * result of all binary operators were the common arithmetic type, 33a8096716Srillig * but that was wrong for the comparison operators. The expression 34a8096716Srillig * '1ULL < 2ULL' does not have type 'unsigned long long' but 'int' in 35a8096716Srillig * default mode, or '_Bool' in strict bool mode. 36a8096716Srillig */ 373065c1c3Srillig _Bool lt_unsigned_big_ok: 1ULL < 1ULL << 63 ? 1 : -1; 38a8096716Srillig /* expect+1: error: illegal bit-field size: 255 [36] */ 393065c1c3Srillig _Bool lt_unsigned_big_bad: 1ULL << 63 < 1ULL ? 1 : -1; 403065c1c3Srillig }; 41