Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/usr.bin/xlint/lint1 lint: add enum flags to the test a...
details: https://anonhg.NetBSD.org/src/rev/38f7c71ed6ae
branches: trunk
changeset: 958571:38f7c71ed6ae
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Jan 10 21:45:50 2021 +0000
description:
lint: add enum flags to the test about strict boolean mode
diffstat:
tests/usr.bin/xlint/lint1/d_c99_bool_strict.c | 35 +++++++++++++++++++++++++-
1 files changed, 33 insertions(+), 2 deletions(-)
diffs (53 lines):
diff -r e2deea70c48a -r 38f7c71ed6ae tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
--- a/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c Sun Jan 10 21:26:12 2021 +0000
+++ b/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c Sun Jan 10 21:45:50 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: d_c99_bool_strict.c,v 1.1 2021/01/10 17:43:46 rillig Exp $ */
+/* $NetBSD: d_c99_bool_strict.c,v 1.2 2021/01/10 21:45:50 rillig Exp $ */
# 3 "d_c99_bool_strict.c"
/*
@@ -23,7 +23,7 @@
* its main operator is _Bool.
*/
-// Not yet implemented: /* lint1-extra-flags: -B */
+// Not yet implemented: /* lint1-extra-flags: -T */
/*
* The header <stdbool.h> defines the macros bool = _Bool, false = 0 and
@@ -250,3 +250,34 @@
LOGAND = 0 && 1, /* ok */
};
+
+enum BitSet {
+ ONE = 1 << 0,
+ TWO = 1 << 1,
+ FOUR = 1 << 2
+};
+
+/*
+ * It is debatable whether it is a good idea to allow expressions like these
+ * for _Bool. The strict rules above ensure that the code works in the same
+ * way whether or not the special rule C99 6.3.1.2 is active or not.
+ *
+ * If the code were to switch away from the C99 bool type to an ordinary
+ * unsigned integer type, the behavior might silently change. Because the
+ * rule C99 6.3.1.2 is no longer active in that case, high bits of the enum
+ * constant may get lost, thus evaluating to false even though a bit is set.
+ *
+ * It's probably better to not allow this kind of expressions, even though
+ * it may be popular, especially in usr.bin/make.
+ */
+int
+S007_allow_flag_test_on_bit_set_enums(enum BitSet bs)
+{
+ if (bs & ONE)
+ return 1;
+ if (!(bs & TWO))
+ return 2;
+ if (bs & FOUR)
+ return 2;
+ return 4;
+}
Home |
Main Index |
Thread Index |
Old Index