Module Name: src
Committed By: rillig
Date: Sat Sep 28 14:25:04 UTC 2024
Modified Files:
src/tests/usr.bin/xlint/lint1: decl_arg.c
src/usr.bin/xlint/lint1: cgram.y
Log Message:
lint: allow more than one __attribute__ on a parameter declaration
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/tests/usr.bin/xlint/lint1/decl_arg.c
cvs rdiff -u -r1.508 -r1.509 src/usr.bin/xlint/lint1/cgram.y
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_arg.c
diff -u src/tests/usr.bin/xlint/lint1/decl_arg.c:1.13 src/tests/usr.bin/xlint/lint1/decl_arg.c:1.14
--- src/tests/usr.bin/xlint/lint1/decl_arg.c:1.13 Sun Jan 28 08:17:27 2024
+++ src/tests/usr.bin/xlint/lint1/decl_arg.c Sat Sep 28 14:25:04 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: decl_arg.c,v 1.13 2024/01/28 08:17:27 rillig Exp $ */
+/* $NetBSD: decl_arg.c,v 1.14 2024/09/28 14:25:04 rillig Exp $ */
# 3 "decl_arg.c"
/*
@@ -95,10 +95,32 @@ const
return arg;
}
-void test_varargs_attribute(
+// The attribute 'unused' belongs to the parameter.
+// The attribute 'format' belongs to the function type.
+void
+param_func_attr_unused(
+ /* FIXME: handle the 'unused' attribute */
+ /* expect+1: warning: parameter 'pr' unused in function 'param_func_attr_unused' [231] */
void (*pr)(const char *, ...)
+ __attribute__((__unused__))
__attribute__((__format__(__printf__, 1, 2)))
-);
+)
+{
+}
+
+// The attribute 'unused' belongs to the parameter.
+// The attribute 'format' belongs to the function type.
+void
+param_func_attr_printf(
+ void (*pr)(const char *, ...)
+ __attribute__((__unused__))
+ __attribute__((__format__(__printf__, 1, 2)))
+)
+{
+ // GCC and Clang already warn about the malformed format string,
+ // so there is nothing left to do for lint.
+ pr("%");
+}
/*
* XXX: To cover the grammar rule 'direct_notype_param_decl', the parameters
Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.508 src/usr.bin/xlint/lint1/cgram.y:1.509
--- src/usr.bin/xlint/lint1/cgram.y:1.508 Sat Sep 28 11:20:29 2024
+++ src/usr.bin/xlint/lint1/cgram.y Sat Sep 28 14:25:04 2024
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.508 2024/09/28 11:20:29 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.509 2024/09/28 14:25:04 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.508 2024/09/28 11:20:29 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.509 2024/09/28 14:25:04 rillig Exp $");
#endif
#include <limits.h>
@@ -154,7 +154,7 @@ new_attribute(const sbuf_t *prefix, cons
%}
-%expect 107
+%expect 110
%union {
val_t *y_val;
@@ -1699,15 +1699,15 @@ abstract_declaration: /* specific to li
;
abstract_decl_param_list: /* specific to lint */
- abstract_decl_lparen T_RPAREN type_attribute_opt {
+ abstract_decl_lparen T_RPAREN type_attribute_list_opt {
$$ = (parameter_list){ .first = NULL };
}
| abstract_decl_lparen vararg_parameter_type_list T_RPAREN
- type_attribute_opt {
+ type_attribute_list_opt {
$$ = $2;
$$.prototype = true;
}
-| abstract_decl_lparen error T_RPAREN type_attribute_opt {
+| abstract_decl_lparen error T_RPAREN type_attribute_list_opt {
$$ = (parameter_list){ .first = NULL };
}
;