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 typeok_colon_pointer from ...
details: https://anonhg.NetBSD.org/src/rev/e762a0be6664
branches: trunk
changeset: 980691:e762a0be6664
user: rillig <rillig%NetBSD.org@localhost>
date: Mon Feb 15 07:36:40 2021 +0000
description:
lint: extract typeok_colon_pointer from typeok_colon
The subtype information is now only accessed if both operands are
actually pointers.
No functional change.
diffstat:
usr.bin/xlint/lint1/tree.c | 53 +++++++++++++++++++++++++--------------------
1 files changed, 29 insertions(+), 24 deletions(-)
diffs (93 lines):
diff -r 8e343eb802bd -r e762a0be6664 usr.bin/xlint/lint1/tree.c
--- a/usr.bin/xlint/lint1/tree.c Mon Feb 15 07:18:20 2021 +0000
+++ b/usr.bin/xlint/lint1/tree.c Mon Feb 15 07:36:40 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.205 2021/02/04 06:54:59 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.206 2021/02/15 07:36:40 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.205 2021/02/04 06:54:59 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.206 2021/02/15 07:36:40 rillig Exp $");
#endif
#include <float.h>
@@ -1008,13 +1008,36 @@
return true;
}
+static void
+typeok_colon_pointer(const mod_t *mp,
+ const tnode_t *ln, const type_t *ltp,
+ const tnode_t *rn, const type_t *rtp)
+{
+ type_t *lstp = ltp->t_subt;
+ type_t *rstp = rtp->t_subt;
+ tspec_t lst = lstp->t_tspec;
+ tspec_t rst = rstp->t_tspec;
+
+ if ((lst == VOID && rst == FUNC) || (lst == FUNC && rst == VOID)) {
+ /* (void *)0 handled above */
+ if (sflag)
+ /* ANSI C forbids conv. of %s to %s, op %s */
+ warning(305, "function pointer", "'void *'",
+ mp->m_name);
+ return;
+ }
+
+ if (eqptrtype(lstp, rstp, true))
+ return;
+ if (!eqtype(lstp, rstp, true, false, NULL))
+ warn_incompatible_pointers(mp, ltp, rtp);
+}
+
static bool
typeok_colon(const mod_t *mp,
const tnode_t *ln, const type_t *ltp, tspec_t lt,
const tnode_t *rn, const type_t *rtp, tspec_t rt)
{
- type_t *lstp, *rstp;
- tspec_t lst, rst;
if (is_arithmetic(lt) && is_arithmetic(rt))
return true;
@@ -1026,11 +1049,6 @@
if (lt == UNION && rt == UNION && ltp->t_str == rtp->t_str)
return true;
- lstp = lt == PTR ? ltp->t_subt : NULL;
- rstp = rt == PTR ? rtp->t_subt : NULL;
- lst = lstp != NULL ? lstp->t_tspec : NOTSPEC;
- rst = rstp != NULL ? rstp->t_tspec : NOTSPEC;
-
/* combination of any pointer and null pointer is ok */
if (lt == PTR && is_null_pointer(rn))
return true;
@@ -1053,21 +1071,8 @@
return true;
}
- if (lt == PTR && rt == PTR && ((lst == VOID && rst == FUNC) ||
- (lst == FUNC && rst == VOID))) {
- /* (void *)0 handled above */
- if (sflag)
- /* ANSI C forbids conv. of %s to %s, op %s */
- warning(305, "function pointer", "'void *'",
- mp->m_name);
- return true;
- }
-
- if (rt == PTR && lt == PTR) {
- if (eqptrtype(lstp, rstp, true))
- return true;
- if (!eqtype(lstp, rstp, true, false, NULL))
- warn_incompatible_pointers(mp, ltp, rtp);
+ if (lt == PTR && rt == PTR) {
+ typeok_colon_pointer(mp, ln, ltp, rn, rtp);
return true;
}
Home |
Main Index |
Thread Index |
Old Index