Module Name: src Committed By: rillig Date: Sun Jun 20 20:32:42 UTC 2021
Modified Files: src/usr.bin/xlint/lint1: ckbool.c lex.c lint1.h print.c tree.c Log Message: lint: rename val_t.v_unsigned to avoid confusion The name v_unsigned suggested that the value would be interpreted as unsigned, which was wrong. Whether a value is signed or unsigned is decided by v_tspec instead. Revert the previous commit for boolen constants since their value is already interpreted as unsigned, and there is no need for any warning about differences between traditional C and ANSI C since the _Bool type has only been added ten years later in C99. The code for printing a tree node was also confused by this struct member, even with its old name v_ansiu. That code will be fixed in a follow-up commit. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/usr.bin/xlint/lint1/ckbool.c cvs rdiff -u -r1.45 -r1.46 src/usr.bin/xlint/lint1/lex.c cvs rdiff -u -r1.104 -r1.105 src/usr.bin/xlint/lint1/lint1.h cvs rdiff -u -r1.13 -r1.14 src/usr.bin/xlint/lint1/print.c cvs rdiff -u -r1.288 -r1.289 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.3 src/usr.bin/xlint/lint1/ckbool.c:1.4 --- src/usr.bin/xlint/lint1/ckbool.c:1.3 Sun Jun 20 19:15:58 2021 +++ src/usr.bin/xlint/lint1/ckbool.c Sun Jun 20 20:32:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ckbool.c,v 1.3 2021/06/20 19:15:58 rillig Exp $ */ +/* $NetBSD: ckbool.c,v 1.4 2021/06/20 20:32:42 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.3 2021/06/20 19:15:58 rillig Exp $"); +__RCSID("$NetBSD: ckbool.c,v 1.4 2021/06/20 20:32:42 rillig Exp $"); #endif #include <string.h> @@ -252,7 +252,7 @@ fallback_symbol_strict_bool(sym_t *sym) sym->s_scl = CTCONST; /* close enough */ sym->s_type = gettyp(BOOL); sym->s_value.v_tspec = BOOL; - sym->s_value.v_unsigned = true; + sym->s_value.v_unsigned_since_c90 = false; sym->s_value.v_quad = 0; return true; } @@ -261,7 +261,7 @@ fallback_symbol_strict_bool(sym_t *sym) sym->s_scl = CTCONST; /* close enough */ sym->s_type = gettyp(BOOL); sym->s_value.v_tspec = BOOL; - sym->s_value.v_unsigned = true; + sym->s_value.v_unsigned_since_c90 = false; sym->s_value.v_quad = 1; return true; } Index: src/usr.bin/xlint/lint1/lex.c diff -u src/usr.bin/xlint/lint1/lex.c:1.45 src/usr.bin/xlint/lint1/lex.c:1.46 --- src/usr.bin/xlint/lint1/lex.c:1.45 Sun Jun 20 19:04:50 2021 +++ src/usr.bin/xlint/lint1/lex.c Sun Jun 20 20:32:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lex.c,v 1.45 2021/06/20 19:04:50 rillig Exp $ */ +/* $NetBSD: lex.c,v 1.46 2021/06/20 20:32:42 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: lex.c,v 1.45 2021/06/20 19:04:50 rillig Exp $"); +__RCSID("$NetBSD: lex.c,v 1.46 2021/06/20 20:32:42 rillig Exp $"); #endif #include <ctype.h> @@ -672,7 +672,7 @@ lex_integer_constant(const char *yytext, yylval.y_val = xcalloc(1, sizeof(*yylval.y_val)); yylval.y_val->v_tspec = typ; - yylval.y_val->v_unsigned = ansiu; + yylval.y_val->v_unsigned_since_c90 = ansiu; yylval.y_val->v_quad = (int64_t)uq; return T_CON; Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.104 src/usr.bin/xlint/lint1/lint1.h:1.105 --- src/usr.bin/xlint/lint1/lint1.h:1.104 Sun Jun 20 19:04:50 2021 +++ src/usr.bin/xlint/lint1/lint1.h Sun Jun 20 20:32:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.104 2021/06/20 19:04:50 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.105 2021/06/20 20:32:42 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -107,8 +107,13 @@ typedef enum { /* An integer or floating-point value. */ typedef struct { tspec_t v_tspec; - bool v_unsigned; /* set if an integer constant is - unsigned in C90 and later */ + /* + * Set if an integer constant is unsigned only in C90 and later, but + * not in traditional C. + * + * See the operators table in ops.def, columns "l r". + */ + bool v_unsigned_since_c90; union { int64_t _v_quad; /* integers */ ldbl_t _v_ldbl; /* floats */ Index: src/usr.bin/xlint/lint1/print.c diff -u src/usr.bin/xlint/lint1/print.c:1.13 src/usr.bin/xlint/lint1/print.c:1.14 --- src/usr.bin/xlint/lint1/print.c:1.13 Sun Jun 20 19:04:50 2021 +++ src/usr.bin/xlint/lint1/print.c Sun Jun 20 20:32:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.13 2021/06/20 19:04:50 rillig Exp $ */ +/* $NetBSD: print.c,v 1.14 2021/06/20 20:32:42 rillig Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: print.c,v 1.13 2021/06/20 19:04:50 rillig Exp $"); +__RCSID("$NetBSD: print.c,v 1.14 2021/06/20 20:32:42 rillig Exp $"); #endif #include <stdio.h> @@ -63,7 +63,8 @@ print_tnode(char *buf, size_t bufsiz, co break; default: (void)snprintf(buf, bufsiz, - v->v_unsigned ? "%llu" : "%lld", + /* FIXME */ + v->v_unsigned_since_c90 ? "%llu" : "%lld", (unsigned long long)v->v_quad); break; } Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.288 src/usr.bin/xlint/lint1/tree.c:1.289 --- src/usr.bin/xlint/lint1/tree.c:1.288 Sun Jun 20 19:04:50 2021 +++ src/usr.bin/xlint/lint1/tree.c Sun Jun 20 20:32:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.288 2021/06/20 19:04:50 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.289 2021/06/20 20:32:42 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.288 2021/06/20 19:04:50 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.289 2021/06/20 20:32:42 rillig Exp $"); #endif #include <float.h> @@ -183,7 +183,7 @@ expr_new_constant(type_t *tp, val_t *v) n->tn_type = tp; n->tn_val = expr_zalloc(sizeof(*n->tn_val)); n->tn_val->v_tspec = tp->t_tspec; - n->tn_val->v_unsigned = v->v_unsigned; + n->tn_val->v_unsigned_since_c90 = v->v_unsigned_since_c90; n->tn_val->v_u = v->v_u; free(v); return n; @@ -532,16 +532,16 @@ build(op_t op, tnode_t *ln, tnode_t *rn) * ANSI C, print a warning. */ if (mp->m_warn_if_left_unsigned_in_c90 && - ln->tn_op == CON && ln->tn_val->v_unsigned) { + ln->tn_op == CON && ln->tn_val->v_unsigned_since_c90) { /* ANSI C treats constant as unsigned, op %s */ warning(218, mp->m_name); - ln->tn_val->v_unsigned = false; + ln->tn_val->v_unsigned_since_c90 = false; } if (mp->m_warn_if_right_unsigned_in_c90 && - rn->tn_op == CON && rn->tn_val->v_unsigned) { + rn->tn_op == CON && rn->tn_val->v_unsigned_since_c90) { /* ANSI C treats constant as unsigned, op %s */ warning(218, mp->m_name); - rn->tn_val->v_unsigned = false; + rn->tn_val->v_unsigned_since_c90 = false; } /* Make sure both operands are of the same type */ @@ -2364,7 +2364,7 @@ convert_constant(op_t op, int arg, const range_check = false; if (nt == BOOL) { /* C99 6.3.1.2 */ - nv->v_unsigned = false; + nv->v_unsigned_since_c90 = false; nv->v_quad = is_nonzero_val(v) ? 1 : 0; return; } @@ -2376,13 +2376,13 @@ convert_constant(op_t op, int arg, const nv->v_quad = v->v_quad; } - if ((v->v_unsigned && is_floating(nt)) || - (v->v_unsigned && (is_integer(nt) && !is_uinteger(nt) && + if ((v->v_unsigned_since_c90 && is_floating(nt)) || + (v->v_unsigned_since_c90 && (is_integer(nt) && !is_uinteger(nt) && portable_size_in_bits(nt) > portable_size_in_bits(ot)))) { /* ANSI C treats constant as unsigned */ warning(157); - v->v_unsigned = false; + v->v_unsigned_since_c90 = false; } switch (nt) { @@ -3618,7 +3618,8 @@ constant(tnode_t *tn, bool required) if (tn->tn_op == CON) { lint_assert(tn->tn_type->t_tspec == tn->tn_val->v_tspec); if (is_integer(tn->tn_val->v_tspec)) { - v->v_unsigned = tn->tn_val->v_unsigned; + v->v_unsigned_since_c90 = + tn->tn_val->v_unsigned_since_c90; v->v_quad = tn->tn_val->v_quad; return v; }