Module Name: src Committed By: rillig Date: Sun Aug 22 20:14:24 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: expr_fold.c expr_fold.exp Log Message: tests/lint: demonstrate wrong folding of 64-bit numbers To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/expr_fold.c \ src/tests/usr.bin/xlint/lint1/expr_fold.exp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/expr_fold.c diff -u src/tests/usr.bin/xlint/lint1/expr_fold.c:1.2 src/tests/usr.bin/xlint/lint1/expr_fold.c:1.3 --- src/tests/usr.bin/xlint/lint1/expr_fold.c:1.2 Thu Aug 19 20:48:47 2021 +++ src/tests/usr.bin/xlint/lint1/expr_fold.c Sun Aug 22 20:14:24 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: expr_fold.c,v 1.2 2021/08/19 20:48:47 rillig Exp $ */ +/* $NetBSD: expr_fold.c,v 1.3 2021/08/22 20:14:24 rillig Exp $ */ # 3 "expr_fold.c" /* @@ -285,3 +285,22 @@ fold_bitor(void) take_bool(1 | 3); take_bool(3 | 1); } + +/* + * The following expression originated in vndcompress.c 1.29 from 2017-07-29, + * where line 310 contained a seemingly harmless compile-time assertion that + * expanded to a real monster expression. + * + * __CTASSERT(MUL_OK(uint64_t, MAX_N_BLOCKS, MAX_BLOCKSIZE)); + */ +struct ctassert5_struct { + unsigned int member: + /*CONSTCOND*/ + 0xfffffffeU + <= + ((1ULL << 63) + 1 < 1 ? ~(1ULL << 63) : ~0ULL) / 0xfffffe00U + ? 1 + /* FIXME: the above '(1ULL << 63) + 1' is wrong */ + /* expect+1: error: illegal bit-field size: 255 [36] */ + : -1; +}; Index: src/tests/usr.bin/xlint/lint1/expr_fold.exp diff -u src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.2 src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.3 --- src/tests/usr.bin/xlint/lint1/expr_fold.exp:1.2 Thu Aug 19 20:48:47 2021 +++ src/tests/usr.bin/xlint/lint1/expr_fold.exp Sun Aug 22 20:14:24 2021 @@ -51,3 +51,4 @@ expr_fold.c(204): warning: integer overf expr_fold.c(207): warning: integer overflow detected, op << [141] expr_fold.c(211): warning: shift amount 104 is greater than bit-size 32 of 'unsigned int' [122] expr_fold.c(223): warning: shift amount 104 is greater than bit-size 32 of 'int' [122] +expr_fold.c(305): error: illegal bit-field size: 255 [36]