Module Name:    src
Committed By:   rillig
Date:           Tue Jun 29 13:58:13 UTC 2021

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: Makefile lex_integer.c
            lex_integer_ilp32.c msg_259.c msg_259_ilp32.c t_integration.sh
Added Files:
        src/tests/usr.bin/xlint/lint1: lex_char_uchar.c lex_char_uchar.exp

Log Message:
tests/lint: add test that only runs where char == unsigned char

There a 4 regular NetBSD builds where lint is activated.  All these
builds run on platforms where char == signed char.

The official test runs from https://releng.netbsd.org/test-results.html
mostly have char == signed char as well.

However, lint behaves differently on platforms with char == unsigned
char.  On these platforms, a simple "char ch = '\xff'" leads to the
bogus warning that "conversion of 'int' to 'char' is out of range".


To generate a diff of this commit:
cvs rdiff -u -r1.1068 -r1.1069 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.70 -r1.71 src/tests/usr.bin/xlint/lint1/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/lex_char_uchar.c \
    src/tests/usr.bin/xlint/lint1/lex_char_uchar.exp
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/lex_integer.c
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c \
    src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/msg_259.c
cvs rdiff -u -r1.65 -r1.66 src/tests/usr.bin/xlint/lint1/t_integration.sh

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.1068 src/distrib/sets/lists/tests/mi:1.1069
--- src/distrib/sets/lists/tests/mi:1.1068	Tue Jun 29 09:19:17 2021
+++ src/distrib/sets/lists/tests/mi	Tue Jun 29 13:58:13 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1068 2021/06/29 09:19:17 rillig Exp $
+# $NetBSD: mi,v 1.1069 2021/06/29 13:58:13 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6222,6 +6222,8 @@
 ./usr/tests/usr.bin/xlint/lint1/gcc_typeof_after_statement.exp	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/lex_char.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/lex_char.exp			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/lex_char_uchar.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/lex_char_uchar.exp		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/lex_comment.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/lex_comment.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/lex_floating.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.70 src/tests/usr.bin/xlint/lint1/Makefile:1.71
--- src/tests/usr.bin/xlint/lint1/Makefile:1.70	Tue Jun 29 09:44:25 2021
+++ src/tests/usr.bin/xlint/lint1/Makefile	Tue Jun 29 13:58:13 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.70 2021/06/29 09:44:25 rillig Exp $
+# $NetBSD: Makefile,v 1.71 2021/06/29 13:58:13 rillig Exp $
 
 NOMAN=		# defined
 MAX_MESSAGE=	345		# see lint1/err.c
@@ -125,6 +125,8 @@ FILES+=		gcc_typeof_after_statement.c
 FILES+=		gcc_typeof_after_statement.exp
 FILES+=		lex_char.c
 FILES+=		lex_char.exp
+FILES+=		lex_char_uchar.c
+FILES+=		lex_char_uchar.exp
 FILES+=		lex_comment.c
 FILES+=		lex_comment.exp
 FILES+=		lex_floating.c

Index: src/tests/usr.bin/xlint/lint1/lex_integer.c
diff -u src/tests/usr.bin/xlint/lint1/lex_integer.c:1.3 src/tests/usr.bin/xlint/lint1/lex_integer.c:1.4
--- src/tests/usr.bin/xlint/lint1/lex_integer.c:1.3	Tue Jun 29 08:46:10 2021
+++ src/tests/usr.bin/xlint/lint1/lex_integer.c	Tue Jun 29 13:58:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lex_integer.c,v 1.3 2021/06/29 08:46:10 rillig Exp $	*/
+/*	$NetBSD: lex_integer.c,v 1.4 2021/06/29 13:58:13 rillig Exp $	*/
 # 3 "lex_integer.c"
 
 /*
@@ -7,7 +7,7 @@
  * C99 6.4.4.1 "Integer constants"
  */
 
-/* lint1-only-on-lp64 */
+/* lint1-only-if lp64 */
 
 void sinki(int);
 void sinku(unsigned int);

Index: src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c
diff -u src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c:1.1 src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c:1.2
--- src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c:1.1	Tue Jun 29 09:19:17 2021
+++ src/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c	Tue Jun 29 13:58:13 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lex_integer_ilp32.c,v 1.1 2021/06/29 09:19:17 rillig Exp $	*/
+/*	$NetBSD: lex_integer_ilp32.c,v 1.2 2021/06/29 13:58:13 rillig Exp $	*/
 # 3 "lex_integer_ilp32.c"
 
 /*
@@ -7,7 +7,7 @@
  * C99 6.4.4.1 "Integer constants"
  */
 
-/* lint1-only-on-ilp32 */
+/* lint1-only-if ilp32 */
 
 void sinki(int);
 void sinku(unsigned int);
Index: src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c
diff -u src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c:1.1 src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c:1.2
--- src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c:1.1	Tue Jun 29 09:19:17 2021
+++ src/tests/usr.bin/xlint/lint1/msg_259_ilp32.c	Tue Jun 29 13:58:13 2021
@@ -1,9 +1,9 @@
-/*	$NetBSD: msg_259_ilp32.c,v 1.1 2021/06/29 09:19:17 rillig Exp $	*/
+/*	$NetBSD: msg_259_ilp32.c,v 1.2 2021/06/29 13:58:13 rillig Exp $	*/
 # 3 "msg_259_ilp32.c"
 
 // Test for message: argument #%d is converted from '%s' to '%s' due to prototype [259]
 
-/* lint1-only-on-ilp32 */
+/* lint1-only-if ilp32 */
 /* lint1-extra-flags: -h */
 
 void farg_char(char);

Index: src/tests/usr.bin/xlint/lint1/msg_259.c
diff -u src/tests/usr.bin/xlint/lint1/msg_259.c:1.7 src/tests/usr.bin/xlint/lint1/msg_259.c:1.8
--- src/tests/usr.bin/xlint/lint1/msg_259.c:1.7	Tue Jun 29 09:19:17 2021
+++ src/tests/usr.bin/xlint/lint1/msg_259.c	Tue Jun 29 13:58:13 2021
@@ -1,9 +1,9 @@
-/*	$NetBSD: msg_259.c,v 1.7 2021/06/29 09:19:17 rillig Exp $	*/
+/*	$NetBSD: msg_259.c,v 1.8 2021/06/29 13:58:13 rillig Exp $	*/
 # 3 "msg_259.c"
 
 // Test for message: argument #%d is converted from '%s' to '%s' due to prototype [259]
 
-/* lint1-only-on-lp64 */
+/* lint1-only-if lp64 */
 /* lint1-extra-flags: -h */
 
 void farg_char(char);

Index: src/tests/usr.bin/xlint/lint1/t_integration.sh
diff -u src/tests/usr.bin/xlint/lint1/t_integration.sh:1.65 src/tests/usr.bin/xlint/lint1/t_integration.sh:1.66
--- src/tests/usr.bin/xlint/lint1/t_integration.sh:1.65	Tue Jun 29 09:19:17 2021
+++ src/tests/usr.bin/xlint/lint1/t_integration.sh	Tue Jun 29 13:58:13 2021
@@ -1,4 +1,4 @@
-# $NetBSD: t_integration.sh,v 1.65 2021/06/29 09:19:17 rillig Exp $
+# $NetBSD: t_integration.sh,v 1.66 2021/06/29 13:58:13 rillig Exp $
 #
 # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -36,12 +36,43 @@ configure_test_case()
 
 	# shellcheck disable=SC2016
 	awk='
-		function is_ilp32() {
-			return match(machine_arch, /^(arm|coldfire|hppa|i386|m68000|m68k|mips|mips64|or1k|powerpc|riscv32|sh3|sparc|vax)$/)
+		BEGIN {
+			# see usr.bin/xlint/arch/.../targparam.h
+			platform["aarch64"]	= "schar lp64  long ldbl-128"
+			platform["alpha"]	= "schar lp64  long ldbl-64"
+			platform["arm"]		= "uchar ilp32 long ldbl-64"
+			platform["coldfire"]	= "schar ilp32 int  ldbl-64"
+			platform["hppa"]	= "schar ilp32 long ldbl-64"
+			platform["i386"]	= "schar ilp32 int  ldbl-96"
+			platform["ia64"]	= "schar lp64  long ldbl-128"
+			platform["m68000"]	= "schar ilp32 int  ldbl-64"
+			platform["m68k"]	= "schar ilp32 int  ldbl-96"
+			platform["mips"]	= "schar ilp32 ???? ldbl-64"
+			platform["mips64"]	= "schar ilp32 long ldbl-128"
+			platform["mipsn64"]	= "schar lp64  long ldbl-128"
+			platform["or1k"]	= "schar ilp32 int  ldbl-64"
+			platform["powerpc"]	= "uchar ilp32 int  ldbl-64"
+			platform["powerpc64"]	= "uchar lp64  long ldbl-64"
+			platform["powerpc64"]	= "uchar lp64  long ldbl-64"
+			platform["riscv32"]	= "schar ilp32 int  ldbl-64"
+			platform["riscv64"]	= "schar lp64  long ldbl-64"
+			platform["sh3"]		= "schar ilp32 int  ldbl-64"
+			platform["sparc"]	= "schar ilp32 long ldbl-64"
+			platform["sparc64"]	= "schar lp64  long ldbl-128"
+			platform["vax"]		= "schar ilp32 long ldbl-64"
+			platform["x86_64"]	= "schar lp64  long ldbl-128"
 		}
 
-		function is_lp64() {
-			return match(machine_arch, /^(aarch64|alpha|ia64|mipsn64|powerpc64|riscv64|sparc64|x86_64)$/)
+		function platform_has(prop) {
+			if (!match(prop, /^(schar|uchar|ilp32|lp64|int|long|ldbl-64|ldbl-96|ldbl-128)$/)) {
+				printf("bad property '\''%s'\''\n", prop) > "/dev/stderr";
+				exit(1);
+			}
+			if (platform[machine_arch] == "") {
+				printf("bad machine_arch '\''%s'\''\n", machine_arch) > "/dev/stderr";
+				exit(1);
+			}
+			return match(" " platform[machine_arch] " ", " " prop " ")
 		}
 
 		BEGIN {
@@ -58,16 +89,16 @@ configure_test_case()
 				for (i = 3; i < NF; i++)
 					flags = flags " " $i
 			}
-			if ($2 == "lint1-only-on-arch") {
+			if ($2 == "lint1-only-if-arch") {
 				seen_only_on_arch = 1
 				if ($3 == machine_arch)
 					match_only_on_arch = 1
 			}
-			if ($2 == "lint1-not-on-arch" && $3 == machine_arch)
+			if ($2 == "lint1-skip-if-arch" && $3 == machine_arch)
 				skip = 1
-			if ($2 == "lint1-only-on-ilp32" && !is_ilp32())
+			if ($2 == "lint1-only-if" && !platform_has($3))
 				skip = 1
-			if ($2 == "lint1-only-on-lp64" && !is_lp64())
+			if ($2 == "lint1-skip-if" && platform_has($3))
 				skip = 1
 		}
 

Added files:

Index: src/tests/usr.bin/xlint/lint1/lex_char_uchar.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/lex_char_uchar.c:1.1
--- /dev/null	Tue Jun 29 13:58:14 2021
+++ src/tests/usr.bin/xlint/lint1/lex_char_uchar.c	Tue Jun 29 13:58:13 2021
@@ -0,0 +1,16 @@
+/*	$NetBSD: lex_char_uchar.c,v 1.1 2021/06/29 13:58:13 rillig Exp $	*/
+# 3 "lex_char_uchar.c"
+
+/*
+ * Test lexical analysis of character constants on platforms where plain
+ * char has the same representation as unsigned char.
+ */
+
+/* lint1-only-if uchar */
+
+/*
+ * FIXME: The warning is bogus; it must be possible to initialize a char
+ *  variable with a character constant.
+ */
+/* expect+1: conversion of 'int' to 'char' is out of range [119] */
+char ch = '\xff';
Index: src/tests/usr.bin/xlint/lint1/lex_char_uchar.exp
diff -u /dev/null src/tests/usr.bin/xlint/lint1/lex_char_uchar.exp:1.1
--- /dev/null	Tue Jun 29 13:58:14 2021
+++ src/tests/usr.bin/xlint/lint1/lex_char_uchar.exp	Tue Jun 29 13:58:13 2021
@@ -0,0 +1 @@
+lex_char_uchar.c(16): warning: conversion of 'int' to 'char' is out of range [119]

Reply via email to