Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src tests/lint: add test that only runs where char == unsigned char



details:   https://anonhg.NetBSD.org/src/rev/a8683c2092b2
branches:  trunk
changeset: 984252:a8683c2092b2
user:      rillig <rillig%NetBSD.org@localhost>
date:      Tue Jun 29 13:58:13 2021 +0000

description:
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".

diffstat:

 distrib/sets/lists/tests/mi                   |   4 +-
 tests/usr.bin/xlint/lint1/Makefile            |   4 +-
 tests/usr.bin/xlint/lint1/lex_char_uchar.c    |  16 ++++++++
 tests/usr.bin/xlint/lint1/lex_char_uchar.exp  |   1 +
 tests/usr.bin/xlint/lint1/lex_integer.c       |   4 +-
 tests/usr.bin/xlint/lint1/lex_integer_ilp32.c |   4 +-
 tests/usr.bin/xlint/lint1/msg_259.c           |   4 +-
 tests/usr.bin/xlint/lint1/msg_259_ilp32.c     |   4 +-
 tests/usr.bin/xlint/lint1/t_integration.sh    |  49 ++++++++++++++++++++++----
 9 files changed, 71 insertions(+), 19 deletions(-)

diffs (205 lines):

diff -r 1aa347aea326 -r a8683c2092b2 distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Tue Jun 29 13:48:24 2021 +0000
+++ b/distrib/sets/lists/tests/mi       Tue Jun 29 13:58:13 2021 +0000
@@ -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
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/Makefile
--- a/tests/usr.bin/xlint/lint1/Makefile        Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/Makefile        Tue Jun 29 13:58:13 2021 +0000
@@ -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.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
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/lex_char_uchar.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/lex_char_uchar.c        Tue Jun 29 13:58:13 2021 +0000
@@ -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';
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/lex_char_uchar.exp
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/lex_char_uchar.exp      Tue Jun 29 13:58:13 2021 +0000
@@ -0,0 +1,1 @@
+lex_char_uchar.c(16): warning: conversion of 'int' to 'char' is out of range [119]
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/lex_integer.c
--- a/tests/usr.bin/xlint/lint1/lex_integer.c   Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/lex_integer.c   Tue Jun 29 13:58:13 2021 +0000
@@ -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);
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/lex_integer_ilp32.c
--- a/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c     Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/lex_integer_ilp32.c     Tue Jun 29 13:58:13 2021 +0000
@@ -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);
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/msg_259.c
--- a/tests/usr.bin/xlint/lint1/msg_259.c       Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_259.c       Tue Jun 29 13:58:13 2021 +0000
@@ -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);
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/msg_259_ilp32.c
--- a/tests/usr.bin/xlint/lint1/msg_259_ilp32.c Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_259_ilp32.c Tue Jun 29 13:58:13 2021 +0000
@@ -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);
diff -r 1aa347aea326 -r a8683c2092b2 tests/usr.bin/xlint/lint1/t_integration.sh
--- a/tests/usr.bin/xlint/lint1/t_integration.sh        Tue Jun 29 13:48:24 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/t_integration.sh        Tue Jun 29 13:58:13 2021 +0000
@@ -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 @@
 
        # 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 @@
                                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
                }
 



Home | Main Index | Thread Index | Old Index