Module Name:    src
Committed By:   rillig
Date:           Mon Jun 17 17:06:48 UTC 2024

Modified Files:
        src/tests/usr.bin/xlint/lint1: c23.c
        src/usr.bin/xlint/lint1: cgram.y externs1.h tree.c

Log Message:
lint: accept C23 [[fallthrough]] statements

Needed by bind9/getaddresses.c:137.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/xlint/lint1/c23.c
cvs rdiff -u -r1.504 -r1.505 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.229 -r1.230 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.647 -r1.648 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/c23.c
diff -u src/tests/usr.bin/xlint/lint1/c23.c:1.14 src/tests/usr.bin/xlint/lint1/c23.c:1.15
--- src/tests/usr.bin/xlint/lint1/c23.c:1.14	Mon Jun 17 04:14:02 2024
+++ src/tests/usr.bin/xlint/lint1/c23.c	Mon Jun 17 17:06:48 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: c23.c,v 1.14 2024/06/17 04:14:02 rillig Exp $	*/
+/*	$NetBSD: c23.c,v 1.15 2024/06/17 17:06:48 rillig Exp $	*/
 # 3 "c23.c"
 
 // Tests for the option -Ac23, which allows features from C23 and all earlier
@@ -8,7 +8,7 @@
 //	c11.c
 //	msg_353.c		for empty initializer braces
 
-/* lint1-flags: -Ac23 -w -X 351 */
+/* lint1-flags: -Ac23 -hw -X 351 */
 
 
 int
@@ -178,3 +178,22 @@ attributes_in_parameter_declaration(
     [[maybe_unused]] const number const_typedef_param)
 {
 }
+
+int
+attribute_in_switch_statement(int n)
+{
+	switch (n) {
+	case 1:
+		n++;
+	/* expect+1: warning: fallthrough on case statement [220] */
+	case 2:
+		n++;
+		[[fallthrough]];
+	case 3:
+		n++;
+		[[fallthrough]];
+	default:
+		n++;
+	}
+	return n;
+}

Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.504 src/usr.bin/xlint/lint1/cgram.y:1.505
--- src/usr.bin/xlint/lint1/cgram.y:1.504	Mon Jun 17 04:14:02 2024
+++ src/usr.bin/xlint/lint1/cgram.y	Mon Jun 17 17:06:47 2024
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.504 2024/06/17 04:14:02 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.505 2024/06/17 17:06:47 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.504 2024/06/17 04:14:02 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.505 2024/06/17 17:06:47 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -2112,6 +2112,11 @@ expression_statement:
 		expr($2, false, false, false, false);
 		suppress_fallthrough = false;
 	}
+|	attribute_specifier_sequence T_SEMI {
+		debug_attribute_list(&$1);
+		check_statement_reachable();
+		suppress_fallthrough = attributes_contain(&$1, "fallthrough");
+	}
 ;
 
 /* C99 6.8.4, C23 6.8.5.1 */

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.229 src/usr.bin/xlint/lint1/externs1.h:1.230
--- src/usr.bin/xlint/lint1/externs1.h:1.229	Sun May 12 18:00:58 2024
+++ src/usr.bin/xlint/lint1/externs1.h	Mon Jun 17 17:06:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.229 2024/05/12 18:00:58 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.230 2024/06/17 17:06:47 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -306,6 +306,7 @@ buffer *cat_strings(buffer *, buffer *);
 unsigned int type_size_in_bits(const type_t *);
 sym_t *find_member(const struct_or_union *, const char *);
 uint64_t possible_bits(const tnode_t *);
+bool attributes_contain(const attribute_list *, const char *);
 
 void begin_statement_expr(void);
 void do_statement_expr(tnode_t *);

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.647 src/usr.bin/xlint/lint1/tree.c:1.648
--- src/usr.bin/xlint/lint1/tree.c:1.647	Sun Jun  9 16:53:06 2024
+++ src/usr.bin/xlint/lint1/tree.c	Mon Jun 17 17:06:47 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.647 2024/06/09 16:53:06 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.648 2024/06/17 17:06:47 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.647 2024/06/09 16:53:06 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.648 2024/06/17 17:06:47 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -323,6 +323,17 @@ possible_bits(const tnode_t *tn)
 	return ~ic_expr(tn).bclr;
 }
 
+bool
+attributes_contain(const attribute_list *attrs, const char *str)
+{
+	for (size_t i = 0, n = attrs->len; i < n; i++) {
+		const attribute *attr = attrs->attrs + i;
+		if (attr->prefix == NULL && strcmp(attr->name, str) == 0)
+			return true;
+	}
+	return false;
+}
+
 /* Build 'pointer to tp', 'array of tp' or 'function returning tp'. */
 type_t *
 block_derive_type(type_t *tp, tspec_t t)

Reply via email to