Module Name: src Committed By: rillig Date: Sat Apr 16 22:21:10 UTC 2022
Modified Files: src/usr.bin/xlint/lint1: ckbool.c op.h oper.c ops.def tree.c Log Message: lint: merge mod_t.m_test_context into m_requires_bool These two flags mean exactly the same. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/usr.bin/xlint/lint1/ckbool.c cvs rdiff -u -r1.18 -r1.19 src/usr.bin/xlint/lint1/op.h cvs rdiff -u -r1.10 -r1.11 src/usr.bin/xlint/lint1/oper.c cvs rdiff -u -r1.27 -r1.28 src/usr.bin/xlint/lint1/ops.def cvs rdiff -u -r1.432 -r1.433 src/usr.bin/xlint/lint1/tree.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/xlint/lint1/ckbool.c diff -u src/usr.bin/xlint/lint1/ckbool.c:1.12 src/usr.bin/xlint/lint1/ckbool.c:1.13 --- src/usr.bin/xlint/lint1/ckbool.c:1.12 Sat Apr 9 15:43:41 2022 +++ src/usr.bin/xlint/lint1/ckbool.c Sat Apr 16 22:21:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ckbool.c,v 1.12 2022/04/09 15:43:41 rillig Exp $ */ +/* $NetBSD: ckbool.c,v 1.13 2022/04/16 22:21:10 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: ckbool.c,v 1.12 2022/04/09 15:43:41 rillig Exp $"); +__RCSID("$NetBSD: ckbool.c,v 1.13 2022/04/16 22:21:10 rillig Exp $"); #endif #include <string.h> @@ -156,7 +156,7 @@ typeok_scalar_strict_bool(op_t op, const !typeok_strict_bool_binary_compatible(op, arg, ln, lt, rn, rt)) return false; - if (mp->m_requires_bool || op == QUEST) { + if (mp->m_requires_bool) { bool binary = mp->m_binary; bool lbool = is_typeok_bool_operand(ln); bool ok = true; Index: src/usr.bin/xlint/lint1/op.h diff -u src/usr.bin/xlint/lint1/op.h:1.18 src/usr.bin/xlint/lint1/op.h:1.19 --- src/usr.bin/xlint/lint1/op.h:1.18 Sat Apr 16 21:14:33 2022 +++ src/usr.bin/xlint/lint1/op.h Sat Apr 16 22:21:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: op.h,v 1.18 2022/04/16 21:14:33 rillig Exp $ */ +/* $NetBSD: op.h,v 1.19 2022/04/16 22:21:10 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -47,7 +47,6 @@ typedef struct { bool m_requires_scalar: 1; bool m_fold_constant_operands: 1; bool m_value_context: 1; - bool m_test_context: 1; bool m_balance_operands: 1; bool m_has_side_effect: 1; bool m_warn_if_left_unsigned_in_c90: 1; @@ -66,7 +65,7 @@ extern const mod_t modtab[]; #define op(name, repr, \ is_binary, is_logical, takes_bool, requires_bool, \ is_integer, is_complex, is_arithmetic, is_scalar, \ - can_fold, is_value, is_test, balances_operands, \ + can_fold, is_value, unused, balances_operands, \ side_effects, left_unsigned, right_unsigned, \ precedence_confusion, is_comparison, \ valid_on_enum, bad_on_enum, warn_if_eq) \ Index: src/usr.bin/xlint/lint1/oper.c diff -u src/usr.bin/xlint/lint1/oper.c:1.10 src/usr.bin/xlint/lint1/oper.c:1.11 --- src/usr.bin/xlint/lint1/oper.c:1.10 Mon Aug 2 20:58:39 2021 +++ src/usr.bin/xlint/lint1/oper.c Sat Apr 16 22:21:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: oper.c,v 1.10 2021/08/02 20:58:39 rillig Exp $ */ +/* $NetBSD: oper.c,v 1.11 2022/04/16 22:21:10 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ const mod_t modtab[NOPS] = #define op(name, repr, \ is_binary, is_logical, takes_bool, requires_bool, \ is_integer, is_complex, is_arithmetic, is_scalar, \ - can_fold, is_value, is_test, balances_operands, \ + can_fold, is_value, unused, balances_operands, \ side_effects, left_unsigned, right_unsigned, \ precedence_confusion, is_comparison, \ valid_on_enum, bad_on_enum, warn_if_eq) \ @@ -48,7 +48,7 @@ const mod_t modtab[NOPS] = is_integer + 0 > 0, is_complex + 0 > 0, \ is_arithmetic + 0 > 0, is_scalar + 0 > 0, \ can_fold + 0 > 0, is_value + 0 > 0, \ - is_test + 0 > 0, balances_operands + 0 > 0, \ + balances_operands + 0 > 0, \ side_effects + 0 > 0, left_unsigned + 0 > 0, \ right_unsigned + 0 > 0, precedence_confusion + 0 > 0, \ is_comparison + 0 > 0, valid_on_enum + 0 > 0, \ Index: src/usr.bin/xlint/lint1/ops.def diff -u src/usr.bin/xlint/lint1/ops.def:1.27 src/usr.bin/xlint/lint1/ops.def:1.28 --- src/usr.bin/xlint/lint1/ops.def:1.27 Sat Apr 16 21:22:12 2022 +++ src/usr.bin/xlint/lint1/ops.def Sat Apr 16 22:21:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ops.def,v 1.27 2022/04/16 21:22:12 rillig Exp $ */ +/* $NetBSD: ops.def,v 1.28 2022/04/16 22:21:10 rillig Exp $ */ begin_ops() @@ -14,7 +14,7 @@ begin_ops() * warn if left operand unsigned x | * has side effects - - - - - - - - - - - - x | * balance operands x | | - * test context x | | + * (unused) x | | * value context x | | * fold constant operands - - - - - - - - x | | * requires scalar x | | | @@ -26,11 +26,11 @@ begin_ops() * logical x | | | | * binary x | | | | */ -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( NOOP, "no-op", , , , , , , , , , , , , , , , , , , , ) op( ARROW, "->", 1, ,1, , , , , , ,1, , , , , , , , , , ) op( POINT, ".", 1, ,1, , , , , , , , , , , , , , , , , ) -op( NOT, "!", ,1,1,1, , , ,1,1, ,1, , , , , , , ,1, ) +op( NOT, "!", ,1,1,1, , , ,1,1, , , , , , , , , ,1, ) op( COMPL, "~", , , , , ,1, , ,1,1, , , , , , , , ,1,1) op( INC, "++", , , , , , , , , , , , , , , , , , , , ) op( DEC, "--", , , , , , , , , , , , , , , , , , , , ) @@ -44,7 +44,7 @@ op( INDIR, "*", , , , , , , , , ,1, , op( ADDR, "&", , ,1, , , , , , , , , , , , , , , , , ) /* the operator 'arr[ind]' is translated to '*(arr + ind)' during parsing. */ -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( MULT, "*", 1, , , , , ,1, ,1,1, ,1, , ,1, , , ,1,1) op( DIV, "/", 1, , , , , ,1, ,1,1, ,1, ,1,1, , , ,1,1) op( MOD, "%", 1, , , ,1, , , ,1,1, ,1, ,1,1, , , ,1,1) @@ -53,7 +53,7 @@ op( MINUS, "-", 1, , , , , , ,1,1,1, ,1 op( SHL, "<<", 1, , , ,1, , , ,1,1, , , , , ,1, , ,1,1) op( SHR, ">>", 1, , , ,1, , , ,1,1, , , ,1, ,1, , ,1,1) -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( LT, "<", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1) op( LE, "<=", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1) op( GT, ">", 1,1, , , , , ,1,1,1, ,1, ,1,1, ,1,1, ,1) @@ -61,16 +61,16 @@ op( GE, ">=", 1,1, , , , , ,1,1,1, ,1, op( EQ, "==", 1,1,1, , , , ,1,1,1, ,1, , , , ,1,1, ,1) op( NE, "!=", 1,1,1, , , , ,1,1,1, ,1, , , , ,1,1, ,1) -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( BITAND, "&", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, ) op( BITXOR, "^", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, ) op( BITOR, "|", 1, ,1, ,1, , , ,1,1, ,1, , , ,1, , ,1, ) -op( LOGAND, "&&", 1,1,1,1, , , ,1,1, ,1, , , , , , , ,1, ) -op( LOGOR, "||", 1,1,1,1, , , ,1,1, ,1, , , , ,1, , ,1, ) -op( QUEST, "?", 1, , , , , , , ,1, ,1, , , , , , , , , ) +op( LOGAND, "&&", 1,1,1,1, , , ,1,1, , , , , , , , , ,1, ) +op( LOGOR, "||", 1,1,1,1, , , ,1,1, , , , , , ,1, , ,1, ) +op( QUEST, "?", 1, , ,1, , , , ,1, , , , , , , , , , , ) op( COLON, ":", 1, ,1, , , , , , ,1, ,1, , , , , ,1, , ) -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( ASSIGN, "=", 1, ,1, , , , , , , , , ,1, , , , ,1, , ) op( MULASS, "*=", 1, , , , , ,1, , , , , ,1, , , , , ,1, ) op( DIVASS, "/=", 1, , , , , ,1, , , , , ,1, ,1, , , ,1, ) @@ -83,7 +83,7 @@ op( ANDASS, "&=", 1, ,1, ,1, , , , , , op( XORASS, "^=", 1, ,1, ,1, , , , , , , ,1, , , , , ,1, ) op( ORASS, "|=", 1, ,1, ,1, , , , , , , ,1, , , , , ,1, ) -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( NAME, "name", , , , , , , , , , , , , , , , , , , , ) op( CON, "constant", , , , , , , , , , , , , , , , , , , , ) op( STRING, "string", , , , , , , , , , , , , , , , , , , , ) @@ -105,7 +105,7 @@ op( REAL, "real", , , , , , , , , , , op( IMAG, "imag", , , , , , , , , , , , , , , , , , , , ) /* INIT, CASE and FARG are pseudo operators that don't appear in the tree. */ -/* name repr b l b B i c a s f v t b s l r p c e e = */ +/* name repr b l b B i c a s f v - b s l r p c e e = */ op( INIT, "init", 1, ,1, , , , , , , , , ,1, , , , ,1, , ) op( CASE, "case", , , , , , , , , , , , , , , , , , , , ) /* Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.432 src/usr.bin/xlint/lint1/tree.c:1.433 --- src/usr.bin/xlint/lint1/tree.c:1.432 Sat Apr 16 21:14:33 2022 +++ src/usr.bin/xlint/lint1/tree.c Sat Apr 16 22:21:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.432 2022/04/16 21:14:33 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.433 2022/04/16 22:21:10 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: tree.c,v 1.432 2022/04/16 21:14:33 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.433 2022/04/16 22:21:10 rillig Exp $"); #endif #include <float.h> @@ -85,7 +85,7 @@ static tnode_t *build_colon(bool, tnode_ static tnode_t *build_assignment(op_t, bool, tnode_t *, tnode_t *); static tnode_t *plength(type_t *); static tnode_t *fold(tnode_t *); -static tnode_t *fold_test(tnode_t *); +static tnode_t *fold_bool(tnode_t *); static tnode_t *fold_float(tnode_t *); static tnode_t *check_function_arguments(type_t *, tnode_t *); static tnode_t *check_prototype_argument(int, type_t *, tnode_t *); @@ -536,7 +536,7 @@ build_binary(tnode_t *ln, op_t op, bool * Apply class conversions to the left operand, but only if its * value is needed or it is compared with zero. */ - if (mp->m_value_context || mp->m_test_context) + if (mp->m_value_context || mp->m_requires_bool) ln = cconv(ln); /* * The right operand is almost always in a test or value context, @@ -555,7 +555,7 @@ build_binary(tnode_t *ln, op_t op, bool if (mp->m_comparison) check_integer_comparison(op, ln, rn); - if (mp->m_value_context || mp->m_test_context) + if (mp->m_value_context || mp->m_requires_bool) ln = promote(op, false, ln); if (mp->m_binary && op != ARROW && op != POINT && op != ASSIGN && op != RETURN && op != INIT) { @@ -664,7 +664,7 @@ build_binary(tnode_t *ln, op_t op, bool * it is compared with zero and if this operand is a constant. */ if (hflag && !constcond_flag && - mp->m_test_context && + mp->m_requires_bool && (ln->tn_op == CON || ((mp->m_binary && op != QUEST) && rn->tn_op == CON)) && /* XXX: rn->tn_system_dependent should be checked as well */ @@ -676,8 +676,8 @@ build_binary(tnode_t *ln, op_t op, bool /* Fold if the operator requires it */ if (mp->m_fold_constant_operands) { if (ln->tn_op == CON && (!mp->m_binary || rn->tn_op == CON)) { - if (mp->m_test_context) { - ntn = fold_test(ntn); + if (mp->m_requires_bool) { + ntn = fold_bool(ntn); } else if (is_floating(ntn->tn_type->t_tspec)) { ntn = fold_float(ntn); } else { @@ -3292,11 +3292,10 @@ fold(tnode_t *tn) } /* - * Fold constant nodes, as much as is needed for comparing the value with 0 - * (test context, for controlling expressions). + * Fold constant nodes, as much as is needed for comparing the value with 0. */ static tnode_t * -fold_test(tnode_t *tn) +fold_bool(tnode_t *tn) { bool l, r; val_t *v; @@ -3878,7 +3877,7 @@ is_constcond_false(const tnode_t *tn, ts * memory which is used for the expression. */ void -expr(tnode_t *tn, bool vctx, bool tctx, bool dofreeblk, bool is_do_while) +expr(tnode_t *tn, bool vctx, bool cond, bool dofreeblk, bool is_do_while) { if (tn == NULL) { /* in case of errors */ @@ -3890,13 +3889,13 @@ expr(tnode_t *tn, bool vctx, bool tctx, if (dcs->d_kind != DK_EXTERN && !is_do_while) check_statement_reachable(); - check_expr_misc(tn, vctx, tctx, !tctx, false, false, false); + check_expr_misc(tn, vctx, cond, !cond, false, false, false); if (tn->tn_op == ASSIGN) { - if (hflag && tctx) + if (hflag && cond) /* assignment in conditional context */ warning(159); } else if (tn->tn_op == CON) { - if (hflag && tctx && !constcond_flag && + if (hflag && cond && !constcond_flag && !tn->tn_system_dependent && !(is_do_while && is_constcond_false(tn, tn->tn_type->t_tspec))) @@ -3908,7 +3907,7 @@ expr(tnode_t *tn, bool vctx, bool tctx, * for left operands of COMMA this warning is already * printed */ - if (tn->tn_op != COMMA && !vctx && !tctx) + if (tn->tn_op != COMMA && !vctx && !cond) check_null_effect(tn); } debug_node(tn); @@ -4054,18 +4053,18 @@ check_expr_assign(const tnode_t *ln, boo static void check_expr_call(const tnode_t *tn, const tnode_t *ln, - bool szof, bool vctx, bool tctx, bool retval_discarded) + bool szof, bool vctx, bool cond, bool retval_discarded) { lint_assert(ln->tn_op == ADDR); lint_assert(ln->tn_left->tn_op == NAME); if (!szof && !is_compiler_builtin(ln->tn_left->tn_sym->s_name)) - outcall(tn, vctx || tctx, retval_discarded); + outcall(tn, vctx || cond, retval_discarded); } static bool check_expr_op(const tnode_t *tn, op_t op, const tnode_t *ln, - bool szof, bool fcall, bool vctx, bool tctx, + bool szof, bool fcall, bool vctx, bool cond, bool retval_discarded, bool eqwarn) { switch (op) { @@ -4098,7 +4097,7 @@ check_expr_op(const tnode_t *tn, op_t op check_expr_assign(ln, szof); break; case CALL: - check_expr_call(tn, ln, szof, vctx, tctx, retval_discarded); + check_expr_call(tn, ln, szof, vctx, cond, retval_discarded); break; case EQ: if (hflag && eqwarn) @@ -4153,13 +4152,13 @@ check_expr_op(const tnode_t *tn, op_t op } void -check_expr_misc(const tnode_t *tn, bool vctx, bool tctx, +check_expr_misc(const tnode_t *tn, bool vctx, bool cond, bool eqwarn, bool fcall, bool retval_discarded, bool szof) { tnode_t *ln, *rn; const mod_t *mp; op_t op; - bool cvctx, ctctx, eq, discard; + bool cvctx, ccond, eq, discard; if (tn == NULL) return; @@ -4169,11 +4168,11 @@ check_expr_misc(const tnode_t *tn, bool mp = &modtab[op = tn->tn_op]; if (!check_expr_op(tn, op, ln, - szof, fcall, vctx, tctx, retval_discarded, eqwarn)) + szof, fcall, vctx, cond, retval_discarded, eqwarn)) return; cvctx = mp->m_value_context; - ctctx = mp->m_test_context; + ccond = mp->m_requires_bool; eq = mp->m_warn_if_operand_eq && !ln->tn_parenthesized && rn != NULL && !rn->tn_parenthesized; @@ -4185,9 +4184,9 @@ check_expr_misc(const tnode_t *tn, bool * context for both operands of COLON */ if (op == COLON && tn->tn_type->t_tspec == VOID) - cvctx = ctctx = false; + cvctx = ccond = false; discard = op == CVT && tn->tn_type->t_tspec == VOID; - check_expr_misc(ln, cvctx, ctctx, eq, op == CALL, discard, szof); + check_expr_misc(ln, cvctx, ccond, eq, op == CALL, discard, szof); switch (op) { case PUSH: @@ -4200,10 +4199,10 @@ check_expr_misc(const tnode_t *tn, bool check_expr_misc(rn, false, true, eq, false, false, szof); break; case COLON: - check_expr_misc(rn, cvctx, ctctx, eq, false, false, szof); + check_expr_misc(rn, cvctx, ccond, eq, false, false, szof); break; case COMMA: - check_expr_misc(rn, vctx, tctx, eq, false, false, szof); + check_expr_misc(rn, vctx, cond, eq, false, false, szof); break; default: if (mp->m_binary)