Module Name: src
Committed By: rillig
Date: Fri Oct 11 20:45:15 UTC 2024
Modified Files:
src/usr.bin/xlint/lint1: tree.c
Log Message:
lint: sort integer constraint functions and branches
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.654 -r1.655 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/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.654 src/usr.bin/xlint/lint1/tree.c:1.655
--- src/usr.bin/xlint/lint1/tree.c:1.654 Thu Oct 10 05:01:03 2024
+++ src/usr.bin/xlint/lint1/tree.c Fri Oct 11 20:45:15 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.654 2024/10/10 05:01:03 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.655 2024/10/11 20:45:15 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.654 2024/10/10 05:01:03 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.655 2024/10/11 20:45:15 rillig Exp $");
#endif
#include <float.h>
@@ -130,37 +130,6 @@ ic_any(const type_t *tp)
}
static integer_constraints
-ic_con(const type_t *tp, const val_t *v)
-{
- integer_constraints c;
-
- lint_assert(is_integer(tp->t_tspec));
- int64_t si = v->u.integer;
- uint64_t ui = (uint64_t)si;
- c.smin = si;
- c.smax = si;
- c.umin = ui;
- c.umax = ui;
- c.bclr = ~ui;
- return c;
-}
-
-static integer_constraints
-ic_cvt(const type_t *ntp, const type_t *otp, integer_constraints a)
-{
- unsigned nw = width_in_bits(ntp);
- unsigned ow = width_in_bits(otp);
- bool nu = is_uinteger(ntp->t_tspec);
- bool ou = is_uinteger(otp->t_tspec);
-
- if (nw >= ow && nu == ou)
- return a;
- if (nw > ow && ou)
- return a;
- return ic_any(ntp);
-}
-
-static integer_constraints
ic_mult(const type_t *tp, integer_constraints a, integer_constraints b)
{
integer_constraints c;
@@ -178,28 +147,18 @@ ic_mult(const type_t *tp, integer_constr
}
static integer_constraints
-ic_bitand(integer_constraints a, integer_constraints b)
+ic_div(const type_t *tp, integer_constraints a, integer_constraints b)
{
integer_constraints c;
- c.smin = INT64_MIN;
- c.smax = INT64_MAX;
- c.umin = 0;
- c.umax = ~(a.bclr | b.bclr);
- c.bclr = a.bclr | b.bclr;
- return c;
-}
-
-static integer_constraints
-ic_bitor(integer_constraints a, integer_constraints b)
-{
- integer_constraints c;
+ if (ic_maybe_signed(tp, &a) || ic_maybe_signed(tp, &b) || b.umin == 0)
+ return ic_any(tp);
c.smin = INT64_MIN;
c.smax = INT64_MAX;
- c.umin = 0;
- c.umax = ~(a.bclr & b.bclr);
- c.bclr = a.bclr & b.bclr;
+ c.umin = a.umin / b.umax;
+ c.umax = a.umax / b.umin;
+ c.bclr = ~u64_fill_right(c.umax);
return c;
}
@@ -220,22 +179,6 @@ ic_mod(const type_t *tp, integer_constra
}
static integer_constraints
-ic_div(const type_t *tp, integer_constraints a, integer_constraints b)
-{
- integer_constraints c;
-
- if (ic_maybe_signed(tp, &a) || ic_maybe_signed(tp, &b) || b.umin == 0)
- return ic_any(tp);
-
- c.smin = INT64_MIN;
- c.smax = INT64_MAX;
- c.umin = a.umin / b.umax;
- c.umax = a.umax / b.umin;
- c.bclr = ~u64_fill_right(c.umax);
- return c;
-}
-
-static integer_constraints
ic_shl(const type_t *tp, integer_constraints a, integer_constraints b)
{
integer_constraints c;
@@ -284,7 +227,33 @@ ic_shr(const type_t *tp, integer_constra
}
static integer_constraints
-ic_cond(integer_constraints a, integer_constraints b)
+ic_bitand(integer_constraints a, integer_constraints b)
+{
+ integer_constraints c;
+
+ c.smin = INT64_MIN;
+ c.smax = INT64_MAX;
+ c.umin = 0;
+ c.umax = ~(a.bclr | b.bclr);
+ c.bclr = a.bclr | b.bclr;
+ return c;
+}
+
+static integer_constraints
+ic_bitor(integer_constraints a, integer_constraints b)
+{
+ integer_constraints c;
+
+ c.smin = INT64_MIN;
+ c.smax = INT64_MAX;
+ c.umin = 0;
+ c.umax = ~(a.bclr & b.bclr);
+ c.bclr = a.bclr & b.bclr;
+ return c;
+}
+
+static integer_constraints
+ic_quest_colon(integer_constraints a, integer_constraints b)
{
integer_constraints c;
@@ -297,6 +266,37 @@ ic_cond(integer_constraints a, integer_c
}
static integer_constraints
+ic_con(const type_t *tp, const val_t *v)
+{
+ integer_constraints c;
+
+ lint_assert(is_integer(tp->t_tspec));
+ int64_t si = v->u.integer;
+ uint64_t ui = (uint64_t)si;
+ c.smin = si;
+ c.smax = si;
+ c.umin = ui;
+ c.umax = ui;
+ c.bclr = ~ui;
+ return c;
+}
+
+static integer_constraints
+ic_cvt(const type_t *ntp, const type_t *otp, integer_constraints a)
+{
+ unsigned nw = width_in_bits(ntp);
+ unsigned ow = width_in_bits(otp);
+ bool nu = is_uinteger(ntp->t_tspec);
+ bool ou = is_uinteger(otp->t_tspec);
+
+ if (nw >= ow && nu == ou)
+ return a;
+ if (nw > ow && ou)
+ return a;
+ return ic_any(ntp);
+}
+
+static integer_constraints
ic_expr(const tnode_t *tn)
{
integer_constraints lc, rc;
@@ -304,13 +304,6 @@ ic_expr(const tnode_t *tn)
lint_assert(is_integer(tn->tn_type->t_tspec));
switch (tn->tn_op) {
- case CON:
- return ic_con(tn->tn_type, &tn->u.value);
- case CVT:
- if (!is_integer(tn->u.ops.left->tn_type->t_tspec))
- return ic_any(tn->tn_type);
- lc = ic_expr(tn->u.ops.left);
- return ic_cvt(tn->tn_type, tn->u.ops.left->tn_type, lc);
case MULT:
lc = ic_expr(before_conversion(tn->u.ops.left));
rc = ic_expr(before_conversion(tn->u.ops.right));
@@ -342,7 +335,14 @@ ic_expr(const tnode_t *tn)
case QUEST:
lc = ic_expr(tn->u.ops.right->u.ops.left);
rc = ic_expr(tn->u.ops.right->u.ops.right);
- return ic_cond(lc, rc);
+ return ic_quest_colon(lc, rc);
+ case CON:
+ return ic_con(tn->tn_type, &tn->u.value);
+ case CVT:
+ if (!is_integer(tn->u.ops.left->tn_type->t_tspec))
+ return ic_any(tn->tn_type);
+ lc = ic_expr(tn->u.ops.left);
+ return ic_cvt(tn->tn_type, tn->u.ops.left->tn_type, lc);
default:
return ic_any(tn->tn_type);
}