Module Name: src
Committed By: rillig
Date: Mon Feb 24 19:56:27 UTC 2025
Modified Files:
src/tests/usr.bin/xlint/lint1: c11.c msg_127.c msg_153.c
src/usr.bin/xlint/lint1: err.c tree.c
Log Message:
lint: remove no-op variant of the unary '&' operator
Neither K&R 1978 nor any of the C standards mentions that &function or
&array would be a no-op. This no-op behavior produced wrong warnings in
sbin/gpt.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/xlint/lint1/c11.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_127.c
cvs rdiff -u -r1.10 -r1.11 src/tests/usr.bin/xlint/lint1/msg_153.c
cvs rdiff -u -r1.264 -r1.265 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.672 -r1.673 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/c11.c
diff -u src/tests/usr.bin/xlint/lint1/c11.c:1.8 src/tests/usr.bin/xlint/lint1/c11.c:1.9
--- src/tests/usr.bin/xlint/lint1/c11.c:1.8 Sat Nov 30 11:27:20 2024
+++ src/tests/usr.bin/xlint/lint1/c11.c Mon Feb 24 19:56:27 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: c11.c,v 1.8 2024/11/30 11:27:20 rillig Exp $ */
+/* $NetBSD: c11.c,v 1.9 2025/02/24 19:56:27 rillig Exp $ */
# 3 "c11.c"
/*
@@ -122,7 +122,7 @@ void fvla(int m, int C[m][m])
int (*s)[m];
/* expect+1: warning: nested 'extern' declaration of 'r' [352] */
extern int (*r)[m];
- /* expect+1: warning: illegal combination of 'pointer to array[1] of int' and 'pointer to int', op 'init' [124] */
+ /* expect+1: warning: illegal combination of 'pointer to array[1] of int' and 'pointer to array[100] of int', op 'init' [124] */
static int (*q)[m] = &B;
}
Index: src/tests/usr.bin/xlint/lint1/msg_127.c
diff -u src/tests/usr.bin/xlint/lint1/msg_127.c:1.4 src/tests/usr.bin/xlint/lint1/msg_127.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_127.c:1.4 Thu Jun 16 16:58:36 2022
+++ src/tests/usr.bin/xlint/lint1/msg_127.c Mon Feb 24 19:56:27 2025
@@ -1,14 +1,17 @@
-/* $NetBSD: msg_127.c,v 1.4 2022/06/16 16:58:36 rillig Exp $ */
+/* $NetBSD: msg_127.c,v 1.5 2025/02/24 19:56:27 rillig Exp $ */
# 3 "msg_127.c"
/* Test for message: '&' before array or function: ignored [127] */
+/*
+ * This message is no longer used, as it contradicts all C standards and is
+ * not mentioned in K&R 1978 either.
+ */
/* lint1-extra-flags: -t */
void
example()
{
- /* expect+1: warning: '&' before array or function: ignored [127] */
if (&example != (void *)0)
return;
}
Index: src/tests/usr.bin/xlint/lint1/msg_153.c
diff -u src/tests/usr.bin/xlint/lint1/msg_153.c:1.10 src/tests/usr.bin/xlint/lint1/msg_153.c:1.11
--- src/tests/usr.bin/xlint/lint1/msg_153.c:1.10 Mon Feb 24 19:49:00 2025
+++ src/tests/usr.bin/xlint/lint1/msg_153.c Mon Feb 24 19:56:27 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_153.c,v 1.10 2025/02/24 19:49:00 rillig Exp $ */
+/* $NetBSD: msg_153.c,v 1.11 2025/02/24 19:56:27 rillig Exp $ */
# 3 "msg_153.c"
// Test for message: converting '%s' to incompatible '%s' for argument %d [153]
@@ -44,7 +44,5 @@ qualifiers(char *ptr, const volatile cha
void
pass_pointer_to_array(void)
{
- // FIXME: Must be a pointer to 16 bytes, not to 1 byte.
- /* expect+1: warning: converting 'pointer to unsigned char' to incompatible 'pointer to array[16] of unsigned char' for argument 1 [153] */
take_pointer_to_sixteen_bytes(&bytes);
}
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.264 src/usr.bin/xlint/lint1/err.c:1.265
--- src/usr.bin/xlint/lint1/err.c:1.264 Thu Feb 20 21:53:28 2025
+++ src/usr.bin/xlint/lint1/err.c Mon Feb 24 19:56:27 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.264 2025/02/20 21:53:28 rillig Exp $ */
+/* $NetBSD: err.c,v 1.265 2025/02/24 19:56:27 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.264 2025/02/20 21:53:28 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.265 2025/02/24 19:56:27 rillig Exp $");
#endif
#include <limits.h>
@@ -182,7 +182,7 @@ static const char *const msgs[] = {
"illegal combination of '%s' and '%s', op '%s'", // 124
"pointers to functions can only be compared for equality", // 125
"incompatible types '%s' and '%s' in conditional", // 126
- "'&' before array or function: ignored", // 127
+ "", /* no longer used */ // 127
"operator '%s' discards '%s' from '%s'", // 128
"expression has null effect", // 129
"enum type mismatch: '%s' '%s' '%s'", // 130
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.672 src/usr.bin/xlint/lint1/tree.c:1.673
--- src/usr.bin/xlint/lint1/tree.c:1.672 Thu Feb 20 21:53:28 2025
+++ src/usr.bin/xlint/lint1/tree.c Mon Feb 24 19:56:27 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.672 2025/02/20 21:53:28 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.673 2025/02/24 19:56:27 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.672 2025/02/20 21:53:28 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.673 2025/02/24 19:56:27 rillig Exp $");
#endif
#include <float.h>
@@ -1034,17 +1034,8 @@ balance(op_t op, tnode_t **lnp, tnode_t
}
static tnode_t *
-build_address(bool sys, tnode_t *tn, bool force)
+build_address(bool sys, tnode_t *tn)
{
- tspec_t t;
-
- if (!force && ((t = tn->tn_type->t_tspec) == ARRAY || t == FUNC)) {
- if (!allow_c90)
- /* '&' before array or function: ignored */
- warning(127);
- return tn;
- }
-
/* eliminate '&*' */
if (tn->tn_op == INDIR &&
tn->u.ops.left->tn_type->t_tspec == PTR &&
@@ -1295,7 +1286,7 @@ build_struct_access(op_t op, bool sys, t
bool lvalue = op == ARROW || ln->tn_lvalue;
if (op == POINT)
- ln = build_address(sys, ln, true);
+ ln = build_address(sys, ln);
else if (ln->tn_type->t_tspec != PTR) {
lint_assert(!allow_c90);
lint_assert(is_integer(ln->tn_type->t_tspec));
@@ -2057,7 +2048,7 @@ build_binary(tnode_t *ln, op_t op, bool
ntn = build_prepost_incdec(op, sys, ln);
break;
case ADDR:
- ntn = build_address(sys, ln, false);
+ ntn = build_address(sys, ln);
break;
case INDIR:
ntn = build_op(INDIR, sys, ln->tn_type->t_subt, ln, NULL);
@@ -2357,7 +2348,7 @@ cconv(tnode_t *tn)
}
if (tn->tn_type->t_tspec == FUNC)
- tn = build_address(tn->tn_sys, tn, true);
+ tn = build_address(tn->tn_sys, tn);
if (tn->tn_lvalue) {
type_t *tp = expr_dup_type(tn->tn_type);