Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src tests/lint: test arithmetic promotions and enums
details: https://anonhg.NetBSD.org/src/rev/b591836104e9
branches: trunk
changeset: 1022973:b591836104e9
user: rillig <rillig%NetBSD.org@localhost>
date: Mon Aug 16 20:11:03 2021 +0000
description:
tests/lint: test arithmetic promotions and enums
diffstat:
distrib/sets/lists/tests/mi | 6 +-
tests/usr.bin/xlint/lint1/Makefile | 6 +-
tests/usr.bin/xlint/lint1/expr_promote.c | 57 ++++++++++++++++++++++
tests/usr.bin/xlint/lint1/expr_promote.exp-ln | 5 +
tests/usr.bin/xlint/lint1/expr_promote_trad.c | 46 +++++++++++++++++
tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln | 5 +
tests/usr.bin/xlint/lint1/msg_241.c | 14 +++++-
tests/usr.bin/xlint/lint1/msg_277.c | 6 +-
tests/usr.bin/xlint/lint1/msg_277.exp | 1 +
9 files changed, 142 insertions(+), 4 deletions(-)
diffs (219 lines):
diff -r 6ecc7ebed0d6 -r b591836104e9 distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi Mon Aug 16 18:51:58 2021 +0000
+++ b/distrib/sets/lists/tests/mi Mon Aug 16 20:11:03 2021 +0000
@@ -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
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/Makefile
--- a/tests/usr.bin/xlint/lint1/Makefile Mon Aug 16 18:51:58 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/Makefile Mon Aug 16 20:11:03 2021 +0000
@@ -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.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
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/expr_promote.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/expr_promote.c Mon Aug 16 20:11:03 2021 +0000
@@ -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. */
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/expr_promote.exp-ln
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/expr_promote.exp-ln Mon Aug 16 20:11:03 2021 +0000
@@ -0,0 +1,5 @@
+0sexpr_promote.c
+Sexpr_promote.c
+10d0.10e4sinkF2PcCEV
+54c0.54i4sinkf19PcCBIIIIIIuILuLQuQDDlDsXXlXV
+34d0.34d6callerF1PsT116arithmetic_typesV
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/expr_promote_trad.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/expr_promote_trad.c Mon Aug 16 20:11:03 2021 +0000
@@ -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);
+}
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/expr_promote_trad.exp-ln Mon Aug 16 20:11:03 2021 +0000
@@ -0,0 +1,5 @@
+0sexpr_promote_trad.c
+Sexpr_promote_trad.c
+10d0.10e4sinkFI
+45c0.45s1""i4sinkf11PCIuIIuIIuILuLDDI
+32d0.32do6callerf1PsT116arithmetic_typesI
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/msg_241.c
--- a/tests/usr.bin/xlint/lint1/msg_241.c Mon Aug 16 18:51:58 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_241.c Mon Aug 16 20:11:03 2021 +0000
@@ -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 @@
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];
+}
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/msg_277.c
--- a/tests/usr.bin/xlint/lint1/msg_277.c Mon Aug 16 18:51:58 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_277.c Mon Aug 16 20:11:03 2021 +0000
@@ -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 @@
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;
}
diff -r 6ecc7ebed0d6 -r b591836104e9 tests/usr.bin/xlint/lint1/msg_277.exp
--- a/tests/usr.bin/xlint/lint1/msg_277.exp Mon Aug 16 18:51:58 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/msg_277.exp Mon Aug 16 20:11:03 2021 +0000
@@ -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]
Home |
Main Index |
Thread Index |
Old Index