Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/xlint/lint1 lint: extract duplicate code into is_nul...
details: https://anonhg.NetBSD.org/src/rev/bb226860e530
branches: trunk
changeset: 950292:bb226860e530
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Jan 24 11:34:01 2021 +0000
description:
lint: extract duplicate code into is_null_pointer
No functional change.
diffstat:
usr.bin/xlint/lint1/tree.c | 61 +++++++++++++++++++++------------------------
1 files changed, 28 insertions(+), 33 deletions(-)
diffs (117 lines):
diff -r acb0c21edc6e -r bb226860e530 usr.bin/xlint/lint1/tree.c
--- a/usr.bin/xlint/lint1/tree.c Sun Jan 24 11:31:47 2021 +0000
+++ b/usr.bin/xlint/lint1/tree.c Sun Jan 24 11:34:01 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.189 2021/01/24 11:21:58 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.190 2021/01/24 11:34:01 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.189 2021/01/24 11:21:58 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.190 2021/01/24 11:34:01 rillig Exp $");
#endif
#include <float.h>
@@ -722,6 +722,16 @@
return tn;
}
+static bool
+is_null_pointer(const tnode_t *tn)
+{
+ tspec_t t = tn->tn_type->t_tspec;
+
+ return ((t == PTR && tn->tn_type->t_subt->t_tspec == VOID) ||
+ is_integer(t))
+ && (tn->tn_op == CON && tn->tn_val->v_quad == 0);
+}
+
/*
* See if the node is valid as operand of an operator that compares its
* argument with 0.
@@ -952,16 +962,10 @@
static bool
is_typeok_eq(const tnode_t *ln, tspec_t lt, const tnode_t *rn, tspec_t rt)
{
- if (lt == PTR && ((rt == PTR && rn->tn_type->t_subt->t_tspec == VOID) ||
- is_integer(rt))) {
- if (rn->tn_op == CON && rn->tn_val->v_quad == 0)
- return true;
- }
- if (rt == PTR && ((lt == PTR && ln->tn_type->t_subt->t_tspec == VOID) ||
- is_integer(lt))) {
- if (ln->tn_op == CON && ln->tn_val->v_quad == 0)
- return true;
- }
+ if (lt == PTR && is_null_pointer(rn))
+ return true;
+ if (rt == PTR && is_null_pointer(ln))
+ return true;
return false;
}
@@ -1027,15 +1031,11 @@
lst = lstp != NULL ? lstp->t_tspec : NOTSPEC;
rst = rstp != NULL ? rstp->t_tspec : NOTSPEC;
- /* combination of any pointer and 0, 0L or (void *)0 is ok */
- if (lt == PTR && ((rt == PTR && rst == VOID) || is_integer(rt))) {
- if (rn->tn_op == CON && rn->tn_val->v_quad == 0)
- return true;
- }
- if (rt == PTR && ((lt == PTR && lst == VOID) || is_integer(lt))) {
- if (ln->tn_op == CON && ln->tn_val->v_quad == 0)
- return true;
- }
+ /* combination of any pointer and null pointer is ok */
+ if (lt == PTR && is_null_pointer(rn))
+ return true;
+ if (rt == PTR && is_null_pointer(ln))
+ return true;
if ((lt == PTR && is_integer(rt)) || (is_integer(lt) && rt == PTR)) {
const char *lx = lt == PTR ? "pointer" : "integer";
@@ -1559,11 +1559,9 @@
/* both are struct or union */
return ltp->t_str == rtp->t_str;
- /* 0, 0L and (void *)0 may be assigned to any pointer */
- if (lt == PTR && ((rt == PTR && rst == VOID) || is_integer(rt))) {
- if (rn->tn_op == CON && rn->tn_val->v_quad == 0)
- return true;
- }
+ /* a null pointer may be assigned to any pointer */
+ if (lt == PTR && is_null_pointer(rn))
+ return true;
if (lt == PTR && rt == PTR && (lst == VOID || rst == VOID)) {
/* two pointers, at least one pointer to void */
@@ -2030,20 +2028,17 @@
convert(op_t op, int arg, type_t *tp, tnode_t *tn)
{
tnode_t *ntn;
- tspec_t nt, ot, ost = NOTSPEC;
+ tspec_t nt, ot;
nt = tp->t_tspec;
- if ((ot = tn->tn_type->t_tspec) == PTR)
- ost = tn->tn_type->t_subt->t_tspec;
+ ot = tn->tn_type->t_tspec;
if (!tflag && !sflag && op == FARG)
check_prototype_conversion(arg, nt, ot, tp, tn);
if (is_integer(nt) && is_integer(ot)) {
check_integer_conversion(op, arg, nt, ot, tp, tn);
- } else if (nt == PTR && ((ot == PTR && ost == VOID) ||
- is_integer(ot)) && tn->tn_op == CON &&
- tn->tn_val->v_quad == 0) {
- /* 0, 0L and (void *)0 may be assigned to any pointer. */
+ } else if (nt == PTR && is_null_pointer(tn)) {
+ /* a null pointer may be assigned to any pointer. */
} else if (is_integer(nt) && nt != BOOL && ot == PTR) {
check_pointer_integer_conversion(op, nt, tp, tn);
} else if (nt == PTR && ot == PTR) {
Home |
Main Index |
Thread Index |
Old Index