Module Name:    src
Committed By:   rillig
Date:           Sat Jun  8 09:09:20 UTC 2024

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: Makefile decl.c expr_fold_strict_bool.c
            lang_level_c99.c msg_211.c
        src/usr.bin/xlint/lint1: Makefile
Added Files:
        src/tests/usr.bin/xlint/lint1: expr.c gcc.c
Removed Files:
        src/tests/usr.bin/xlint/lint1: d_c99_for_loops.c d_c9x_array_init.c
            d_cvt_constant.c d_cvt_in_ternary.c d_ellipsis_in_switch.c
            d_gcc_extension.c d_gcc_func.c d_incorrect_array_size.c
            d_long_double_int.c d_return_type.c d_typename_as_var.c
            d_zero_sized_arrays.c

Log Message:
tests/lint: reorganize tests

Tests for a single working language construct don't usually need a
separate file, they can be grouped together, like in expr.c or gcc.c.


To generate a diff of this commit:
cvs rdiff -u -r1.1316 -r1.1317 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.141 -r1.142 src/tests/usr.bin/xlint/lint1/Makefile
cvs rdiff -u -r1.4 -r0 src/tests/usr.bin/xlint/lint1/d_c99_for_loops.c \
    src/tests/usr.bin/xlint/lint1/d_c9x_array_init.c \
    src/tests/usr.bin/xlint/lint1/d_gcc_func.c \
    src/tests/usr.bin/xlint/lint1/d_incorrect_array_size.c
cvs rdiff -u -r1.6 -r0 src/tests/usr.bin/xlint/lint1/d_cvt_constant.c \
    src/tests/usr.bin/xlint/lint1/d_long_double_int.c \
    src/tests/usr.bin/xlint/lint1/d_return_type.c
cvs rdiff -u -r1.3 -r0 src/tests/usr.bin/xlint/lint1/d_cvt_in_ternary.c \
    src/tests/usr.bin/xlint/lint1/d_zero_sized_arrays.c
cvs rdiff -u -r1.5 -r0 src/tests/usr.bin/xlint/lint1/d_ellipsis_in_switch.c
cvs rdiff -u -r1.7 -r0 src/tests/usr.bin/xlint/lint1/d_gcc_extension.c
cvs rdiff -u -r1.2 -r0 src/tests/usr.bin/xlint/lint1/d_typename_as_var.c
cvs rdiff -u -r1.30 -r1.31 src/tests/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/expr.c \
    src/tests/usr.bin/xlint/lint1/gcc.c
cvs rdiff -u -r1.2 -r1.3 \
    src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/lang_level_c99.c
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_211.c
cvs rdiff -u -r1.105 -r1.106 src/usr.bin/xlint/lint1/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1316 src/distrib/sets/lists/tests/mi:1.1317
--- src/distrib/sets/lists/tests/mi:1.1316	Sat May 11 15:53:38 2024
+++ src/distrib/sets/lists/tests/mi	Sat Jun  8 09:09:19 2024
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1316 2024/05/11 15:53:38 rillig Exp $
+# $NetBSD: mi,v 1.1317 2024/06/08 09:09:19 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6581,7 +6581,7 @@
 ./usr/tests/usr.bin/xlint/lint1/d_c99_decls_after_stmt2.c	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_decls_after_stmt3.c	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c	tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_c99_for_loops.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_c99_for_loops.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_func.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_init.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_init.exp			tests-obsolete		obsolete,atf
@@ -6595,7 +6595,7 @@
 ./usr/tests/usr.bin/xlint/lint1/d_c99_union_init3.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_union_init4.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c99_union_init5.c		tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_c9x_array_init.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_c9x_array_init.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_c9x_recursive_init.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_cast_init.c			tests-obsolete		obsolete,atf
@@ -6609,23 +6609,23 @@
 ./usr/tests/usr.bin/xlint/lint1/d_constant_conv1.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_constant_conv2.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_constant_conv2.exp		tests-obsolete		obsolete,atf
-./usr/tests/usr.bin/xlint/lint1/d_cvt_constant.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_cvt_constant.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_cvt_constant.exp		tests-obsolete		obsolete,atf
-./usr/tests/usr.bin/xlint/lint1/d_cvt_in_ternary.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_cvt_in_ternary.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_decl_old_style_arguments.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_decl_old_style_arguments.exp	tests-obsolete		obsolete,atf
-./usr/tests/usr.bin/xlint/lint1/d_ellipsis_in_switch.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_ellipsis_in_switch.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_fold_test.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_fold_test.exp			tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements2.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements3.c	tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_gcc_extension.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_gcc_extension.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_extension.exp		tests-obsolete		obsolete
-./usr/tests/usr.bin/xlint/lint1/d_gcc_func.c			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_gcc_func.c			tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_variable_array_init.c	tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_incorrect_array_size.c	tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_incorrect_array_size.c	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_incorrect_array_size.exp	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_init_array_using_string.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_init_array_using_string.exp	tests-obsolete		obsolete,atf
@@ -6633,14 +6633,14 @@
 ./usr/tests/usr.bin/xlint/lint1/d_init_pop_member.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_lint_assert.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_lint_assert.exp		tests-obsolete		obsolete,atf
-./usr/tests/usr.bin/xlint/lint1/d_long_double_int.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_long_double_int.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_long_double_int.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_nested_structs.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_nolimit_init.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_packed_structs.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_pr_22119.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_pr_22119.exp			tests-obsolete		obsolete,atf
-./usr/tests/usr.bin/xlint/lint1/d_return_type.c			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_return_type.c			tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_return_type.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_shift_to_narrower_type.c	tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_struct_init_nested.c		tests-usr.bin-tests	compattestfile,atf
@@ -6653,8 +6653,8 @@
 ./usr/tests/usr.bin/xlint/lint1/d_type_conv3.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_type_question_colon.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/d_typefun.c			tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_typename_as_var.c		tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/xlint/lint1/d_zero_sized_arrays.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_typename_as_var.c		tests-obsolete		obsolete,atf
+./usr/tests/usr.bin/xlint/lint1/d_zero_sized_arrays.c		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/decl.c				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/decl.exp			tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/decl_arg.c			tests-usr.bin-tests	compattestfile,atf
@@ -6675,6 +6675,7 @@
 ./usr/tests/usr.bin/xlint/lint1/emit.ln				tests-obsolete		obsolete
 ./usr/tests/usr.bin/xlint/lint1/emit_lp64.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/emit_lp64.exp-ln		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/expr.c				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_binary.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_binary.exp			tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_binary_trad.c		tests-usr.bin-tests	compattestfile,atf
@@ -6696,6 +6697,7 @@
 ./usr/tests/usr.bin/xlint/lint1/expr_sizeof.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/feat_stacktrace.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/feat_stacktrace.exp		tests-obsolete		obsolete,atf
+./usr/tests/usr.bin/xlint/lint1/gcc.c				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/gcc_attribute.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/gcc_attribute.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/gcc_attribute_aligned.c		tests-usr.bin-tests	compattestfile,atf

Index: src/tests/usr.bin/xlint/lint1/Makefile
diff -u src/tests/usr.bin/xlint/lint1/Makefile:1.141 src/tests/usr.bin/xlint/lint1/Makefile:1.142
--- src/tests/usr.bin/xlint/lint1/Makefile:1.141	Sun Apr 23 08:47:27 2023
+++ src/tests/usr.bin/xlint/lint1/Makefile	Sat Jun  8 09:09:20 2024
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.141 2023/04/23 08:47:27 rillig Exp $
+# $NetBSD: Makefile,v 1.142 2024/06/08 09:09:20 rillig Exp $
 
 NOMAN=		# defined
 
@@ -20,6 +20,38 @@ FILESDIR=	${TESTSDIR}
 FILES+=		${:!cd ${.CURDIR} && echo *.c *.exp-ln!}
 FILES+=		check-expect.lua
 
+add-test: .PHONY
+	@set -eu; \
+	test=${NAME:Q}; \
+	[ "$$test" ] || { \
+		echo "usage: ${MAKE} add-test NAME=<name>"; \
+		exit; \
+	}; \
+	\
+	if [ -f "$$test.c" ]; then \
+		echo "error: test $$test already exists in $$PWD."; \
+		exit 1; \
+	fi; \
+	\
+	echo "=> Adding test $$test"; \
+	printf '%s\n' \
+		'/*	$$''NetBSD$$	*/' \
+		"# 3 \"$$test.c\"" \
+		'' \
+		'/*' \
+		' * TODO: Explain the purpose of the test.' \
+		' */' \
+		'' \
+		'/* lint1-extra-flags: -Z */' \
+		'/* lint1-flags: -Z */' \
+		'/* lint1-only-if: schar uchar ilp32 lp64 int long ldbl64 ldbl96 ldbl128 */' \
+		'' \
+		'// TODO: Add some code that passes.' \
+		'// TODO: Add some code that fails.' \
+	> "$$test.c"; \
+	cvs add "$$test.c"; \
+	${MAKE} sync-mi
+
 # Note: only works for adding tests.
 # To remove a test, the $$mi file must be edited manually.
 sync-mi: .PHONY

Index: src/tests/usr.bin/xlint/lint1/decl.c
diff -u src/tests/usr.bin/xlint/lint1/decl.c:1.30 src/tests/usr.bin/xlint/lint1/decl.c:1.31
--- src/tests/usr.bin/xlint/lint1/decl.c:1.30	Wed May  1 17:42:57 2024
+++ src/tests/usr.bin/xlint/lint1/decl.c	Sat Jun  8 09:09:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: decl.c,v 1.30 2024/05/01 17:42:57 rillig Exp $	*/
+/*	$NetBSD: decl.c,v 1.31 2024/06/08 09:09:20 rillig Exp $	*/
 # 3 "decl.c"
 
 /*
@@ -269,3 +269,34 @@ offsetof_on_array_member(void)
 	/* expect+1: error: negative array dimension (-20) [20] */
 	typedef int off_arr_3[-(int)(unsigned long)&((s1 *)0)->arr[3]];
 }
+
+/* PR bin/39639: writing "long double" gave "long int" */
+int
+long_double_vs_long_int(long double *a, long int *b)
+{
+	/* expect+1: warning: illegal combination of 'pointer to long double' and 'pointer to long', op '==' [124] */
+	return a == b;
+}
+
+struct zero_sized_array {
+	int member[0];
+};
+
+void
+type_name_as_member_name(void)
+{
+	typedef char h[10];
+
+	typedef struct {
+		int i;
+		char *c;
+	} fh;
+
+	struct foo {
+		fh h;
+		struct {
+			int x;
+			int y;
+		} fl;
+	};
+}

Index: src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c
diff -u src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c:1.2 src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c:1.3
--- src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c:1.2	Sun Aug 22 21:17:04 2021
+++ src/tests/usr.bin/xlint/lint1/expr_fold_strict_bool.c	Sat Jun  8 09:09:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: expr_fold_strict_bool.c,v 1.2 2021/08/22 21:17:04 rillig Exp $	*/
+/*	$NetBSD: expr_fold_strict_bool.c,v 1.3 2024/06/08 09:09:20 rillig Exp $	*/
 # 3 "expr_fold_strict_bool.c"
 
 /*
@@ -9,7 +9,6 @@
  */
 
 /* lint1-extra-flags: -T */
-/* lint1-only-if: lp64 */
 
 typedef long long int64_t;
 typedef unsigned long long uint64_t;

Index: src/tests/usr.bin/xlint/lint1/lang_level_c99.c
diff -u src/tests/usr.bin/xlint/lint1/lang_level_c99.c:1.3 src/tests/usr.bin/xlint/lint1/lang_level_c99.c:1.4
--- src/tests/usr.bin/xlint/lint1/lang_level_c99.c:1.3	Thu Mar 28 21:04:48 2024
+++ src/tests/usr.bin/xlint/lint1/lang_level_c99.c	Sat Jun  8 09:09:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: lang_level_c99.c,v 1.3 2024/03/28 21:04:48 rillig Exp $	*/
+/*	$NetBSD: lang_level_c99.c,v 1.4 2024/06/08 09:09:20 rillig Exp $	*/
 # 3 "lang_level_c99.c"
 
 /*
@@ -176,6 +176,18 @@ call_implicitly_declared_function(void)
 // [x] mixed declarations and code
 
 // [x] new block scopes for selection and iteration statements
+void
+for_scope(void)
+{
+	// A for loop may have a declaration in its first part.
+	for (int i = 0; i < 10; i++)
+		continue;
+
+	// Test that the scope of the previous i has ended.
+	for (int i = 0; i < 10; i++)
+		continue;
+}
+
 
 // [?] integer constant type rules
 //

Index: src/tests/usr.bin/xlint/lint1/msg_211.c
diff -u src/tests/usr.bin/xlint/lint1/msg_211.c:1.6 src/tests/usr.bin/xlint/lint1/msg_211.c:1.7
--- src/tests/usr.bin/xlint/lint1/msg_211.c:1.6	Fri Jul  7 19:45:22 2023
+++ src/tests/usr.bin/xlint/lint1/msg_211.c	Sat Jun  8 09:09:20 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_211.c,v 1.6 2023/07/07 19:45:22 rillig Exp $	*/
+/*	$NetBSD: msg_211.c,v 1.7 2024/06/08 09:09:20 rillig Exp $	*/
 # 3 "msg_211.c"
 
 // Test for message: function has return type '%s' but returns '%s' [211]
@@ -22,3 +22,18 @@ return_int(double dbl, void *ptr, struct
 		return str;
 	return 3;
 }
+
+enum A {
+	A
+};
+
+enum B {
+	B
+};
+
+enum A
+return_enum(enum B arg)
+{
+	/* expect+1: warning: function has return type 'enum A' but returns 'enum B' [211] */
+	return arg;
+}

Index: src/usr.bin/xlint/lint1/Makefile
diff -u src/usr.bin/xlint/lint1/Makefile:1.105 src/usr.bin/xlint/lint1/Makefile:1.106
--- src/usr.bin/xlint/lint1/Makefile:1.105	Sat Jun  8 06:42:59 2024
+++ src/usr.bin/xlint/lint1/Makefile	Sat Jun  8 09:09:19 2024
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.105 2024/06/08 06:42:59 rillig Exp $
+#	$NetBSD: Makefile,v 1.106 2024/06/08 09:09:19 rillig Exp $
 
 .include <bsd.own.mk>
 
@@ -87,36 +87,6 @@ DPSRCS+=	err-msgs.h
 CPPFLAGS+=	-I.
 
 add-test: .PHONY
-	@set -eu; \
-	test=${NAME:Q}; \
-	[ "$$test" ] || { \
-		echo "usage: ${MAKE} add-test NAME=<name>"; \
-		exit; \
-	}; \
-	\
-	cd '../../../tests/usr.bin/xlint/lint1'; \
-	if [ -f "$$test.c" ]; then \
-		echo "error: test $$test already exists in $$PWD."; \
-		exit 1; \
-	fi; \
-	\
-	echo "=> Adding test $$test"; \
-	printf '%s\n' \
-		'/*	$$''NetBSD$$	*/' \
-		"# 3 \"$$test.c\"" \
-		'' \
-		'/*' \
-		' * TODO: Explain the purpose of the test.' \
-		' */' \
-		'' \
-		'/* lint1-extra-flags: -Z */' \
-		'/* lint1-flags: -Z */' \
-		'/* lint1-only-if: schar uchar ilp32 lp64 int long ldbl64 ldbl96 ldbl128 */' \
-		'' \
-		'// TODO: Add some code that passes.' \
-		'// TODO: Add some code that fails.' \
-	> "$$test.c"; \
-	cvs add "$$test.c"; \
-	${MAKE} sync-mi
+	@cd '../../../tests/usr.bin/xlint/lint1' && ${MAKE} add-test
 
 .include <bsd.prog.mk>

Added files:

Index: src/tests/usr.bin/xlint/lint1/expr.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/expr.c:1.1
--- /dev/null	Sat Jun  8 09:09:20 2024
+++ src/tests/usr.bin/xlint/lint1/expr.c	Sat Jun  8 09:09:20 2024
@@ -0,0 +1,33 @@
+/*	$NetBSD: expr.c,v 1.1 2024/06/08 09:09:20 rillig Exp $	*/
+# 3 "expr.c"
+
+/*
+ * Miscellaneous tests for expressions.
+ */
+
+/* lint1-extra-flags: -X 351 */
+
+struct bit_fields {
+	unsigned u32: 32;
+};
+
+unsigned long
+expr_cond_cvt(unsigned long ul)
+{
+	struct bit_fields bits = { 0 };
+	// Combining 'unsigned:32' and 'unsigned long' in the ':' operator
+	// results in 'unsigned long'.
+	return bits.u32 < ul ? bits.u32 : ul;
+}
+
+// Before tree.c 1.76 from 2014-04-17, lint crashed with an internal error,
+// due to an uninitialized right operand of a tree node.
+void
+crash_in_assignment(void)
+{
+	/* expect+1: warning: 'x' set but not used in function 'crash_in_assignment' [191] */
+	double x = 1;
+	int foo = 0;
+	if (foo)
+		x = 1;
+}
Index: src/tests/usr.bin/xlint/lint1/gcc.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/gcc.c:1.1
--- /dev/null	Sat Jun  8 09:09:20 2024
+++ src/tests/usr.bin/xlint/lint1/gcc.c	Sat Jun  8 09:09:20 2024
@@ -0,0 +1,53 @@
+/*	$NetBSD: gcc.c,v 1.1 2024/06/08 09:09:20 rillig Exp $	*/
+# 3 "gcc.c"
+
+/*
+ * Miscellaneous tests that are specific to lint's GCC mode.
+ */
+
+/* lint1-extra-flags: -X 351 */
+
+// Before C99 introduced __func__, GCC already had __FUNCTION__ with the same
+// semantics.
+const char *
+gcc_function(void)
+{
+	// TODO: make __FUNCTION__ an array, then uncomment the code.
+	//typedef int size[-(int)sizeof __FUNCTION__];
+
+	return __FUNCTION__;
+}
+
+// Before C99 introduced designators in initializers, GCC already had them,
+// although with a different syntax for struct/union members and with the
+// a...b for ranges of array elements.
+int array_range_initializers[256] = {
+	[2] = 1,
+	[3] = 2,
+	[4 ... 5] = 3
+};
+
+_Bool dbl_isinf(double);
+
+// Test that the GCC '__extension__' and '__typeof' are recognized.
+void
+extension_and_typeof(void)
+{
+	double __logbw = 1;
+	if (__extension__(({
+		__typeof((__logbw)) x_ = (__logbw);
+		!dbl_isinf((x_));
+	})))
+		__logbw = 1;
+}
+
+int
+range_in_case_label(int i)
+{
+	switch (i) {
+	case 1 ... 40:		// This is a GCC extension.
+		return 1;
+	default:
+		return 2;
+	}
+}

Reply via email to