Module Name: src
Committed By: rillig
Date: Sat Nov 30 10:43:49 UTC 2024
Modified Files:
src/tests/usr.bin/xlint/lint1: decl.c
src/usr.bin/xlint/lint1: decl.c err.c externs1.h func.c lint1.h tree.c
Log Message:
lint: add back optimization for non-query mode
The main point of the optimization is to skip the expensive calls to
type_name when preparing the message details. This was not spelled out
explicitly in the comment.
While here, fix the stray 'previous declaration' message that occurred
whenever a function was first declared as 'static' and later defined
without 'static', see query 16.
To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/tests/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.410 -r1.411 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.257 -r1.258 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.236 -r1.237 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.190 -r1.191 src/usr.bin/xlint/lint1/func.c
cvs rdiff -u -r1.230 -r1.231 src/usr.bin/xlint/lint1/lint1.h
cvs rdiff -u -r1.661 -r1.662 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/tests/usr.bin/xlint/lint1/decl.c
diff -u src/tests/usr.bin/xlint/lint1/decl.c:1.31 src/tests/usr.bin/xlint/lint1/decl.c:1.32
--- src/tests/usr.bin/xlint/lint1/decl.c:1.31 Sat Jun 8 09:09:20 2024
+++ src/tests/usr.bin/xlint/lint1/decl.c Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.31 2024/06/08 09:09:20 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.32 2024/11/30 10:43:49 rillig Exp $ */
# 3 "decl.c"
/*
@@ -300,3 +300,14 @@ type_name_as_member_name(void)
} fl;
};
}
+
+
+// When query 16 is not enabled, don't produce a 'previous declaration' message
+// without a preceding main diagnostic.
+static void static_function(void) __attribute__((__used__));
+
+// The definition is without 'static'.
+void
+static_function(void)
+{
+}
Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.410 src/usr.bin/xlint/lint1/decl.c:1.411
--- src/usr.bin/xlint/lint1/decl.c:1.410 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/decl.c Sat Nov 30 10:43:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.410 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.411 2024/11/30 10:43:48 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.410 2024/11/29 06:57:43 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.411 2024/11/30 10:43:48 rillig Exp $");
#endif
#include <sys/param.h>
@@ -1454,7 +1454,8 @@ declarator_name(sym_t *sym)
dcs->d_redeclared_symbol = NULL;
} else {
dcs->d_redeclared_symbol = sym;
- if (sym->s_scl == STATIC && dcs->d_scl != STATIC) {
+ if (is_query_enabled[16]
+ && sym->s_scl == STATIC && dcs->d_scl != STATIC) {
/* '%s' was declared 'static', now non-'static' */
query_message(16, sym->s_name);
print_previous_declaration(sym);
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.257 src/usr.bin/xlint/lint1/err.c:1.258
--- src/usr.bin/xlint/lint1/err.c:1.257 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/err.c Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.257 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: err.c,v 1.258 2024/11/30 10:43:49 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: err.c,v 1.257 2024/11/29 06:57:43 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.258 2024/11/30 10:43:49 rillig Exp $");
#endif
#include <limits.h>
@@ -755,6 +755,10 @@ static const char *queries[] = {
"typedef '%s' of pointer to union type '%s'", // Q24
};
+// Omit any expensive computations in the default mode where none of the
+// queries are enabled. Function calls in message details don't need to be
+// guarded by this flag, as that happens in the query_message macro already.
+bool any_query_enabled;
bool is_query_enabled[sizeof(queries) / sizeof(queries[0])];
void
@@ -787,6 +791,7 @@ enable_queries(const char *p)
queries[id][0] == '\0')
break;
+ any_query_enabled = true;
is_query_enabled[id] = true;
if (*end == '\0')
Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.236 src/usr.bin/xlint/lint1/externs1.h:1.237
--- src/usr.bin/xlint/lint1/externs1.h:1.236 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/externs1.h Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: externs1.h,v 1.236 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: externs1.h,v 1.237 2024/11/30 10:43:49 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -183,6 +183,7 @@ void debug_attribute_list(const attribut
extern bool seen_error;
extern bool seen_warning;
extern int sytxerr;
+extern bool any_query_enabled;
extern bool is_query_enabled[];
void msglist(void);
Index: src/usr.bin/xlint/lint1/func.c
diff -u src/usr.bin/xlint/lint1/func.c:1.190 src/usr.bin/xlint/lint1/func.c:1.191
--- src/usr.bin/xlint/lint1/func.c:1.190 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/func.c Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: func.c,v 1.190 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: func.c,v 1.191 2024/11/30 10:43:49 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: func.c,v 1.190 2024/11/29 06:57:43 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.191 2024/11/30 10:43:49 rillig Exp $");
#endif
#include <stdlib.h>
@@ -921,7 +921,7 @@ is_parenthesized(const tnode_t *tn)
static void
check_return_value(bool sys, tnode_t *tn)
{
- if (is_parenthesized(tn))
+ if (any_query_enabled && is_parenthesized(tn))
/* parenthesized return value */
query_message(9);
Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.230 src/usr.bin/xlint/lint1/lint1.h:1.231
--- src/usr.bin/xlint/lint1/lint1.h:1.230 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/lint1.h Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.230 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.231 2024/11/30 10:43:49 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -635,7 +635,8 @@ check_printf(const char *fmt, ...)
#else
# define query_message(...) \
do { \
- (query_message)(__VA_ARGS__); \
+ if (any_query_enabled) \
+ (query_message)(__VA_ARGS__); \
} while (false)
#endif
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.661 src/usr.bin/xlint/lint1/tree.c:1.662
--- src/usr.bin/xlint/lint1/tree.c:1.661 Fri Nov 29 06:57:43 2024
+++ src/usr.bin/xlint/lint1/tree.c Sat Nov 30 10:43:49 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.661 2024/11/29 06:57:43 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.662 2024/11/30 10:43:49 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.661 2024/11/29 06:57:43 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.662 2024/11/30 10:43:49 rillig Exp $");
#endif
#include <float.h>
@@ -708,7 +708,7 @@ check_integer_comparison(op_t op, tnode_
if (!is_integer(lt) || !is_integer(rt))
return;
- if (!in_system_header) {
+ if (any_query_enabled && !in_system_header) {
if (lt == CHAR && rn->tn_op == CON &&
!rn->u.value.v_char_constant) {
/* comparison '%s' of 'char' with plain integer %d */
@@ -1532,7 +1532,7 @@ build_assignment(op_t op, bool sys, tnod
/* implicit narrowing conversion from void ... */
query_message(20, type_name(ln->tn_type));
- if (rn->tn_op == CVT && rn->tn_cast &&
+ if (any_query_enabled && rn->tn_op == CVT && rn->tn_cast &&
types_compatible(ln->tn_type, rn->tn_type, false, false, NULL) &&
is_cast_redundant(rn)) {
/* redundant cast from '%s' to '%s' before assignment */
@@ -4301,7 +4301,8 @@ cast(tnode_t *tn, bool sys, type_t *tp)
} else
goto invalid_cast;
- if (types_compatible(tp, tn->tn_type, false, false, NULL))
+ if (any_query_enabled
+ && types_compatible(tp, tn->tn_type, false, false, NULL))
/* no-op cast from '%s' to '%s' */
query_message(6, type_name(tn->tn_type), type_name(tp));