Module Name:    src
Committed By:   rillig
Date:           Mon Feb 27 23:07:53 UTC 2023

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: platform_ilp32.c
        src/usr.bin/xlint/lint1: Makefile
Added Files:
        src/tests/usr.bin/xlint/lint1: platform_ilp32_int.c
            platform_ilp32_long.c

Log Message:
lint: split platform-specific test for loss of accuracy

Lint distinguishes between platforms where size_t is unsigned int and
platforms where size_t is unsigned long.


To generate a diff of this commit:
cvs rdiff -u -r1.1253 -r1.1254 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/platform_ilp32.c
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/platform_ilp32_int.c \
    src/tests/usr.bin/xlint/lint1/platform_ilp32_long.c
cvs rdiff -u -r1.93 -r1.94 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.1253 src/distrib/sets/lists/tests/mi:1.1254
--- src/distrib/sets/lists/tests/mi:1.1253	Fri Feb 24 12:47:23 2023
+++ src/distrib/sets/lists/tests/mi	Mon Feb 27 23:07:53 2023
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1253 2023/02/24 12:47:23 martin Exp $
+# $NetBSD: mi,v 1.1254 2023/02/27 23:07:53 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -7355,6 +7355,8 @@
 ./usr/tests/usr.bin/xlint/lint1/parse_type_name.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/platform_ilp32.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/platform_ilp32.exp		tests-obsolete		obsolete,atf
+./usr/tests/usr.bin/xlint/lint1/platform_ilp32_int.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/platform_ilp32_long.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/platform_int.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/platform_int.exp		tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/xlint/lint1/platform_ldbl128.c		tests-usr.bin-tests	compattestfile,atf

Index: src/tests/usr.bin/xlint/lint1/platform_ilp32.c
diff -u src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.3 src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.4
--- src/tests/usr.bin/xlint/lint1/platform_ilp32.c:1.3	Wed Feb 22 22:12:35 2023
+++ src/tests/usr.bin/xlint/lint1/platform_ilp32.c	Mon Feb 27 23:07:53 2023
@@ -1,28 +1,16 @@
-/*	$NetBSD: platform_ilp32.c,v 1.3 2023/02/22 22:12:35 rillig Exp $	*/
+/*	$NetBSD: platform_ilp32.c,v 1.4 2023/02/27 23:07:53 rillig Exp $	*/
 # 3 "platform_ilp32.c"
 
 /*
  * Test features that only apply to platforms that have 32-bit int, long and
  * pointer types.
+ *
+ * See also:
+ *	platform_ilp32_int.c
+ *	platform_ilp32_long.c
  */
 
 /* lint1-extra-flags: -c -h -a -p -b -r -z */
 /* lint1-only-if: ilp32 */
 
-int s32;
-unsigned int u32;
-long sl32;
-unsigned long ul32;
-
-void
-convert_between_int_and_long(void)
-{
-	/*
-	 * No warning about possible loss of accuracy, as the types have the
-	 * same size.
-	 */
-	s32 = sl32;
-	sl32 = s32;
-	u32 = ul32;
-	ul32 = u32;
-}
+typedef int do_not_warn_about_empty_translation_unit;

Index: src/usr.bin/xlint/lint1/Makefile
diff -u src/usr.bin/xlint/lint1/Makefile:1.93 src/usr.bin/xlint/lint1/Makefile:1.94
--- src/usr.bin/xlint/lint1/Makefile:1.93	Mon Feb  6 20:26:05 2023
+++ src/usr.bin/xlint/lint1/Makefile	Mon Feb 27 23:07:53 2023
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.93 2023/02/06 20:26:05 rillig Exp $
+#	$NetBSD: Makefile,v 1.94 2023/02/27 23:07:53 rillig Exp $
 
 .include <bsd.own.mk>
 
@@ -122,11 +122,6 @@ add-test: .PHONY
 		'// TODO: Add some code that fails.' \
 	> "$$test.c"; \
 	cvs add "$$test.c"; \
-	printf '%s\n' \
-		'/^FILES+=/i' \
-		"FILES+=		$$test.c" \
-		'.' 'w' 'q' \
-	| ed Makefile; \
 	${MAKE} sync-mi
 
 .include <bsd.prog.mk>

Added files:

Index: src/tests/usr.bin/xlint/lint1/platform_ilp32_int.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/platform_ilp32_int.c:1.1
--- /dev/null	Mon Feb 27 23:07:53 2023
+++ src/tests/usr.bin/xlint/lint1/platform_ilp32_int.c	Mon Feb 27 23:07:53 2023
@@ -0,0 +1,29 @@
+/*	$NetBSD: platform_ilp32_int.c,v 1.1 2023/02/27 23:07:53 rillig Exp $	*/
+# 3 "platform_ilp32_int.c"
+
+/*
+ * Test features that only apply to platforms that have 32-bit int, long and
+ * pointer types and where size_t is unsigned int, not unsigned long.
+ */
+
+/* lint1-extra-flags: -c -h -a -p -b -r -z */
+/* lint1-only-if: ilp32 int */
+
+int s32;
+unsigned int u32;
+long sl32;
+unsigned long ul32;
+
+void
+convert_between_int_and_long(void)
+{
+	/*
+	 * No warning about possible loss of accuracy, as the types have the
+	 * same size, both in target platform mode as well as in portable
+	 * mode.
+	 */
+	s32 = sl32;
+	sl32 = s32;
+	u32 = ul32;
+	ul32 = u32;
+}
Index: src/tests/usr.bin/xlint/lint1/platform_ilp32_long.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/platform_ilp32_long.c:1.1
--- /dev/null	Mon Feb 27 23:07:53 2023
+++ src/tests/usr.bin/xlint/lint1/platform_ilp32_long.c	Mon Feb 27 23:07:53 2023
@@ -0,0 +1,35 @@
+/*	$NetBSD: platform_ilp32_long.c,v 1.1 2023/02/27 23:07:53 rillig Exp $	*/
+# 3 "platform_ilp32_long.c"
+
+/*
+ * Test features that only apply to platforms that have 32-bit int, long and
+ * pointer types and where size_t is unsigned long, not unsigned int.
+ *
+ * On these platforms, in portable mode (-p), the type 'int' is in some cases
+ * assumed to be only 24 bits wide, in order to detect conversions from
+ * 'long' (or more probably 'size_t') to 'int', which can lose accuracy.
+ */
+
+/* lint1-extra-flags: -c -h -a -p -b -r -z */
+/* lint1-only-if: ilp32 long */
+
+int s32;
+unsigned int u32;
+long sl32;
+unsigned long ul32;
+
+void
+convert_between_int_and_long(void)
+{
+	/*
+	 * Even though 'long' and 'int' have the same size on this platform,
+	 * the option '-p' enables additional portability checks that assume
+	 * a 24-bit int and a 32-bit long type, to proactively detect loss of
+	 * accuracy on potential other platforms.
+	 */
+	/* expect+1: warning: conversion from 'long' to 'int' may lose accuracy [132] */
+	s32 = sl32;
+	sl32 = s32;
+	u32 = ul32;
+	ul32 = u32;
+}

Reply via email to