Module Name:    src
Committed By:   rillig
Date:           Mon Aug 16 20:11:03 UTC 2021

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: Makefile msg_241.c msg_277.c msg_277.exp
Added Files:
        src/tests/usr.bin/xlint/lint1: expr_promote.c expr_promote.exp-ln
            expr_promote_trad.c expr_promote_trad.exp-ln

Log Message:
tests/lint: test arithmetic promotions and enums


To generate a diff of this commit:
cvs rdiff -u -r1.1111 -r1.1112 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.103 -r1.104 src/tests/usr.bin/xlint/lint1/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/expr_promote.c \
    src/tests/usr.bin/xlint/lint1/expr_promote.exp-ln \
    src/tests/usr.bin/xlint/lint1/expr_promote_trad.c \
    src/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_241.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_277.c
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_277.exp

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.1111 src/distrib/sets/lists/tests/mi:1.1112
--- src/distrib/sets/lists/tests/mi:1.1111	Thu Aug 12 15:06:39 2021
+++ src/distrib/sets/lists/tests/mi	Mon Aug 16 20:11:03 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1111 2021/08/12 15:06:39 martin Exp $
+# $NetBSD: mi,v 1.1112 2021/08/16 20:11:03 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6249,6 +6249,10 @@
 ./usr/tests/usr.bin/xlint/lint1/expr_cast.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_precedence.c		tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_precedence.exp		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/expr_promote.c			tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/expr_promote.exp-ln		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/expr_promote_trad.c		tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_range.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/expr_range.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/feat_stacktrace.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.103 src/tests/usr.bin/xlint/lint1/Makefile:1.104
--- src/tests/usr.bin/xlint/lint1/Makefile:1.103	Mon Aug  9 20:07:24 2021
+++ src/tests/usr.bin/xlint/lint1/Makefile	Mon Aug 16 20:11:03 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.103 2021/08/09 20:07:24 rillig Exp $
+# $NetBSD: Makefile,v 1.104 2021/08/16 20:11:03 rillig Exp $
 
 NOMAN=		# defined
 MAX_MESSAGE=	346		# see lint1/err.c
@@ -141,6 +141,10 @@ FILES+=		expr_cast.c
 FILES+=		expr_cast.exp
 FILES+=		expr_precedence.c
 FILES+=		expr_precedence.exp
+FILES+=		expr_promote.c
+FILES+=		expr_promote.exp-ln
+FILES+=		expr_promote_trad.c
+FILES+=		expr_promote_trad.exp-ln
 FILES+=		expr_range.c
 FILES+=		expr_range.exp
 FILES+=		feat_stacktrace.c

Index: src/tests/usr.bin/xlint/lint1/msg_241.c
diff -u src/tests/usr.bin/xlint/lint1/msg_241.c:1.5 src/tests/usr.bin/xlint/lint1/msg_241.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_241.c:1.5	Mon Aug 16 18:51:58 2021
+++ src/tests/usr.bin/xlint/lint1/msg_241.c	Mon Aug 16 20:11:03 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_241.c,v 1.5 2021/08/16 18:51:58 rillig Exp $	*/
+/*	$NetBSD: msg_241.c,v 1.6 2021/08/16 20:11:03 rillig Exp $	*/
 # 3 "msg_241.c"
 
 // Test for message: dubious operation on enum, op %s [241]
@@ -82,3 +82,15 @@ cover_typeok_enum(enum color c, int i)
 	if (c * i > 5)
 		return;
 }
+
+const char *
+color_name(enum color c)
+{
+	static const char *name[] = { "red", "green", "blue" };
+
+	if (c == RED)
+		return *(c + name); /* unusual but allowed */
+	if (c == GREEN)
+		return c[name]; /* even more unusual */
+	return name[c];
+}

Index: src/tests/usr.bin/xlint/lint1/msg_277.c
diff -u src/tests/usr.bin/xlint/lint1/msg_277.c:1.4 src/tests/usr.bin/xlint/lint1/msg_277.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_277.c:1.4	Sat Feb 27 18:01:29 2021
+++ src/tests/usr.bin/xlint/lint1/msg_277.c	Mon Aug 16 20:11:03 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_277.c,v 1.4 2021/02/27 18:01:29 rillig Exp $	*/
+/*	$NetBSD: msg_277.c,v 1.5 2021/08/16 20:11:03 rillig Exp $	*/
 # 3 "msg_277.c"
 
 // Test for message: initialization of '%s' with '%s' [277]
@@ -24,4 +24,8 @@ example(enum E e, int i)
 	sink_enum(e3);
 	sink_int(i2);
 	sink_int(i3);
+
+	enum E init_0 = 0;
+	/* expect+1: warning: initialization of 'enum E' with 'int' [277] */
+	enum E init_1 = 1;
 }

Index: src/tests/usr.bin/xlint/lint1/msg_277.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_277.exp:1.2 src/tests/usr.bin/xlint/lint1/msg_277.exp:1.3
--- src/tests/usr.bin/xlint/lint1/msg_277.exp:1.2	Sat Feb 27 18:01:29 2021
+++ src/tests/usr.bin/xlint/lint1/msg_277.exp	Mon Aug 16 20:11:03 2021
@@ -1,2 +1,3 @@
 msg_277.c(19): warning: initialization of 'enum E' with 'int' [277]
 msg_277.c(20): warning: initialization of 'int' with 'enum E' [277]
+msg_277.c(30): warning: initialization of 'enum E' with 'int' [277]

Added files:

Index: src/tests/usr.bin/xlint/lint1/expr_promote.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/expr_promote.c:1.1
--- /dev/null	Mon Aug 16 20:11:03 2021
+++ src/tests/usr.bin/xlint/lint1/expr_promote.c	Mon Aug 16 20:11:03 2021
@@ -0,0 +1,57 @@
+/*	$NetBSD: expr_promote.c,v 1.1 2021/08/16 20:11:03 rillig Exp $	*/
+# 3 "expr_promote.c"
+
+/*
+ * Test arithmetic promotions in C90 and later.
+ */
+
+/* lint1-flags: -Sw */
+
+void sink(const char *, ...);
+
+struct arithmetic_types {
+	_Bool boolean;
+	char plain_char;
+	signed char signed_char;
+	unsigned char unsigned_char;
+	short signed_short;
+	unsigned short unsigned_short;
+	int signed_int;
+	unsigned int unsigned_int;
+	long signed_long;
+	unsigned long unsigned_long;
+	long long signed_long_long;
+	unsigned long long unsigned_long_long;
+	float float_floating;
+	double double_floating;
+	long double long_floating;
+	float _Complex float_complex;
+	double _Complex double_complex;
+	long double _Complex long_double_complex;
+};
+
+void
+caller(struct arithmetic_types *arg)
+{
+	sink("",
+	    arg->boolean,		/* gets promoted to 'int' */
+	    arg->plain_char,		/* gets promoted to 'int' */
+	    arg->signed_char,		/* gets promoted to 'int' */
+	    arg->unsigned_char,		/* gets promoted to 'int' */
+	    arg->signed_short,		/* gets promoted to 'int' */
+	    arg->unsigned_short,	/* gets promoted to 'int' */
+	    arg->signed_int,
+	    arg->unsigned_int,
+	    arg->signed_long,
+	    arg->unsigned_long,
+	    arg->signed_long_long,
+	    arg->unsigned_long_long,
+	    arg->float_floating,	/* gets promoted to 'double' */
+	    arg->double_floating,
+	    arg->long_floating,
+	    arg->float_complex,
+	    arg->double_complex,
+	    arg->long_double_complex);
+}
+
+/* XXX: _Bool is not promoted but should. */
Index: src/tests/usr.bin/xlint/lint1/expr_promote.exp-ln
diff -u /dev/null src/tests/usr.bin/xlint/lint1/expr_promote.exp-ln:1.1
--- /dev/null	Mon Aug 16 20:11:03 2021
+++ src/tests/usr.bin/xlint/lint1/expr_promote.exp-ln	Mon Aug 16 20:11:03 2021
@@ -0,0 +1,5 @@
+0sexpr_promote.c
+Sexpr_promote.c
+10d0.10e4sinkF2PcCEV
+54c0.54i4sinkf19PcCBIIIIIIuILuLQuQDDlDsXXlXV
+34d0.34d6callerF1PsT116arithmetic_typesV
Index: src/tests/usr.bin/xlint/lint1/expr_promote_trad.c
diff -u /dev/null src/tests/usr.bin/xlint/lint1/expr_promote_trad.c:1.1
--- /dev/null	Mon Aug 16 20:11:03 2021
+++ src/tests/usr.bin/xlint/lint1/expr_promote_trad.c	Mon Aug 16 20:11:03 2021
@@ -0,0 +1,46 @@
+/*	$NetBSD: expr_promote_trad.c,v 1.1 2021/08/16 20:11:03 rillig Exp $	*/
+# 3 "expr_promote_trad.c"
+
+/*
+ * Test arithmetic promotions in traditional C.
+ */
+
+/* lint1-flags: -tw */
+
+sink();
+
+struct arithmetic_types {
+	/* _Bool is not available in traditional C */
+	char plain_char;
+	/* signed char is not available in traditional C */
+	unsigned char unsigned_char;
+	short signed_short;
+	unsigned short unsigned_short;
+	int signed_int;
+	unsigned int unsigned_int;
+	long signed_long;
+	unsigned long unsigned_long;
+	/* (unsigned) long long is not available in traditional C */
+	/* __int128_t is not available in traditional C */
+	/* __uint128_t is not available in traditional C */
+	float single_floating;
+	double double_floating;
+	/* long double is not available in traditional C */
+	/* _Complex is not available in traditional C */
+};
+
+caller(arg)
+	struct arithmetic_types *arg;
+{
+	sink("",
+	    arg->plain_char,		/* gets promoted to 'int' */
+	    arg->unsigned_char,		/* gets promoted to 'unsigned int' */
+	    arg->signed_short,		/* gets promoted to 'int' */
+	    arg->unsigned_short,	/* gets promoted to 'unsigned int' */
+	    arg->signed_int,
+	    arg->unsigned_int,
+	    arg->signed_long,
+	    arg->unsigned_long,
+	    arg->single_floating,	/* gets promoted to 'double' */
+	    arg->double_floating);
+}
Index: src/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln
diff -u /dev/null src/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln:1.1
--- /dev/null	Mon Aug 16 20:11:03 2021
+++ src/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln	Mon Aug 16 20:11:03 2021
@@ -0,0 +1,5 @@
+0sexpr_promote_trad.c
+Sexpr_promote_trad.c
+10d0.10e4sinkFI
+45c0.45s1""i4sinkf11PCIuIIuIIuILuLDDI
+32d0.32do6callerf1PsT116arithmetic_typesI

Reply via email to