Module Name:    src
Committed By:   rillig
Date:           Sat Feb 20 18:49:27 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: d_c99_bool_strict.c
            d_c99_bool_strict.exp

Log Message:
lint: enable heuristics in test for strict bool mode

This is a preparation for allowing 'do { ... } while (false)', in
addition to the commonly used 'do { ... } while (0)', without declaring
the controlling expression /*CONSTCOND*/.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
cvs rdiff -u -r1.16 -r1.17 \
    src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.18 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.19
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c:1.18	Sat Feb 20 18:02:58 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c	Sat Feb 20 18:49:26 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: d_c99_bool_strict.c,v 1.18 2021/02/20 18:02:58 rillig Exp $	*/
+/*	$NetBSD: d_c99_bool_strict.c,v 1.19 2021/02/20 18:49:26 rillig Exp $	*/
 # 3 "d_c99_bool_strict.c"
 
 /*
@@ -97,7 +97,7 @@
  * __lint_false and true to __lint_true, two predefined constant expressions.
  */
 
-/* lint1-extra-flags: -T */
+/* lint1-extra-flags: -hT */
 
 /*
  * strict-bool-typedef
@@ -130,10 +130,10 @@ strict_bool_constant(void)
 
 enum strict_bool_constant_expressions {
 	/* Ok: __lint_false is a boolean constant expression. */
-	FALSE = __lint_false ? 100 : 101,
+	FALSE = __lint_false ? 100 : 101,	/* expect: 161 */
 
 	/* Ok: __lint_true is a boolean constant expression. */
-	TRUE = __lint_true ? 100 : 101,
+	TRUE = __lint_true ? 100 : 101,		/* expect: 161 */
 
 	/* Not ok: an integer is not a boolean constant expression. */
 	INT0 = 0 ? 100 : 101,	/* expect: 331 */
@@ -159,13 +159,13 @@ enum strict_bool_constant_expressions {
 	UNARY_PLUS = (+0) ? 100 : 101,	/* expect: 331 */
 
 	/* The main operator '>' has return type bool. */
-	Q1 = (13 > 12) ? 100 : 101,
+	Q1 = (13 > 12) ? 100 : 101,		/* expect: 161 */
 
 	/*
 	 * The parenthesized expression has type int and thus cannot be
 	 * used as the controlling expression in the '?:' operator.
 	 */
-	Q2 = (13 > 12 ? 1 : 7) ? 100 : 101,	/* expect: 331 */
+	Q2 = (13 > 12 ? 1 : 7) ? 100 : 101,	/* expect: 161, 331 */
 
 	BINAND_BOOL = __lint_false & __lint_true, /* expect: 55 */
 	BINAND_INT = 0 & 1,
@@ -176,10 +176,10 @@ enum strict_bool_constant_expressions {
 	BINOR_BOOL = __lint_false | __lint_true, /* expect: 55 */
 	BINOR_INT = 0 | 1,
 
-	LOGOR_BOOL = __lint_false || __lint_true, /* expect: 55 */
+	LOGOR_BOOL = __lint_false || __lint_true, /* expect: 161, 55 */
 	LOGOR_INT = 0 || 1,	/* expect: 331, 332 */
 
-	LOGAND_BOOL = __lint_false && __lint_true, /* expect: 55 */
+	LOGAND_BOOL = __lint_false && __lint_true, /* expect: 161, 55 */
 	LOGAND_INT = 0 && 1,	/* expect: 331, 332 */
 };
 
@@ -363,10 +363,10 @@ strict_bool_conversion_from_bool_to_scal
 void
 strict_bool_controlling_expression(bool b, int i, double d, const void *p)
 {
-	if (__lint_false)
+	if (__lint_false)	/* expect: 161 */
 		do_nothing();
 
-	if (__lint_true)
+	if (__lint_true)	/* expect: 161 */
 		do_nothing();
 
 	if (b)
@@ -415,8 +415,8 @@ strict_bool_operand_unary_not(void)
 
 	b = !b;
 	b = !!!b;
-	b = !__lint_false;
-	b = !__lint_true;
+	b = !__lint_false;	/* expect: 161, 239 */
+	b = !__lint_true;	/* expect: 161, 239 */
 
 	int i = 0;
 
@@ -579,8 +579,8 @@ strict_bool_operand_binary_all(bool b, u
 bool
 strict_bool_operand_binary_comma(bool b, int i)
 {
-	b = (b, !b);
-	i = (i, i + 1);
+	b = (b, !b);		/* expect: 129 */
+	i = (i, i + 1);		/* expect: 129 */
 	return b;
 }
 
@@ -725,7 +725,7 @@ strict_bool_assign_bit_field_then_compar
 
 	struct s s = { __lint_false };
 
-	(void)((s.flag = s.flag) != __lint_false);
+	(void)((s.flag = s.flag) != __lint_false);	/* expect: 129 */
 }
 
 void

Index: src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp
diff -u src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.16 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.17
--- src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp:1.16	Sat Feb 20 18:02:58 2021
+++ src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp	Sat Feb 20 18:49:26 2021
@@ -1,19 +1,25 @@
 d_c99_bool_strict.c(126): argument #1 expects '_Bool', gets passed 'int' [334]
 d_c99_bool_strict.c(127): argument #1 expects '_Bool', gets passed 'int' [334]
 d_c99_bool_strict.c(128): argument #1 expects '_Bool', gets passed 'int' [334]
+d_c99_bool_strict.c(133): warning: constant in conditional context [161]
+d_c99_bool_strict.c(136): warning: constant in conditional context [161]
 d_c99_bool_strict.c(139): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(142): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(145): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(148): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(158): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(159): left operand of '?' must be bool, not 'int' [331]
+d_c99_bool_strict.c(162): warning: constant in conditional context [161]
+d_c99_bool_strict.c(168): warning: constant in conditional context [161]
 d_c99_bool_strict.c(168): left operand of '?' must be bool, not 'int' [331]
 d_c99_bool_strict.c(170): integral constant expression expected [55]
 d_c99_bool_strict.c(173): integral constant expression expected [55]
 d_c99_bool_strict.c(176): integral constant expression expected [55]
+d_c99_bool_strict.c(179): warning: constant in conditional context [161]
 d_c99_bool_strict.c(179): integral constant expression expected [55]
 d_c99_bool_strict.c(180): left operand of '||' must be bool, not 'int' [331]
 d_c99_bool_strict.c(180): right operand of '||' must be bool, not 'int' [332]
+d_c99_bool_strict.c(182): warning: constant in conditional context [161]
 d_c99_bool_strict.c(182): integral constant expression expected [55]
 d_c99_bool_strict.c(183): left operand of '&&' must be bool, not 'int' [331]
 d_c99_bool_strict.c(183): right operand of '&&' must be bool, not 'int' [332]
@@ -48,12 +54,18 @@ d_c99_bool_strict.c(352): operands of '=
 d_c99_bool_strict.c(353): operands of '=' have incompatible types (double != _Bool) [107]
 d_c99_bool_strict.c(354): operands of '=' have incompatible types (pointer != _Bool) [107]
 d_c99_bool_strict.c(344): warning: argument b unused in function strict_bool_conversion_from_bool_to_scalar [231]
+d_c99_bool_strict.c(366): warning: constant in conditional context [161]
+d_c99_bool_strict.c(369): warning: constant in conditional context [161]
 d_c99_bool_strict.c(375): controlling expression must be bool, not 'int' [333]
 d_c99_bool_strict.c(378): controlling expression must be bool, not 'int' [333]
 d_c99_bool_strict.c(381): controlling expression must be bool, not 'int' [333]
 d_c99_bool_strict.c(385): controlling expression must be bool, not 'int' [333]
 d_c99_bool_strict.c(391): controlling expression must be bool, not 'double' [333]
 d_c99_bool_strict.c(397): controlling expression must be bool, not 'pointer' [333]
+d_c99_bool_strict.c(418): warning: constant in conditional context [161]
+d_c99_bool_strict.c(418): warning: constant argument to NOT [239]
+d_c99_bool_strict.c(419): warning: constant in conditional context [161]
+d_c99_bool_strict.c(419): warning: constant argument to NOT [239]
 d_c99_bool_strict.c(423): operand of '!' must be bool, not 'int' [330]
 d_c99_bool_strict.c(424): operand of '!' must be bool, not 'int' [330]
 d_c99_bool_strict.c(425): operand of '!' must be bool, not 'int' [330]
@@ -128,6 +140,8 @@ d_c99_bool_strict.c(572): left operand o
 d_c99_bool_strict.c(573): right operand of '>>' must not be bool [337]
 d_c99_bool_strict.c(575): operands of ':' have incompatible types (_Bool != unsigned int) [107]
 d_c99_bool_strict.c(576): operands of ':' have incompatible types (unsigned int != _Bool) [107]
+d_c99_bool_strict.c(582): warning: expression has null effect [129]
+d_c99_bool_strict.c(583): warning: expression has null effect [129]
 d_c99_bool_strict.c(596): operands of '=' have incompatible types (char != _Bool) [107]
 d_c99_bool_strict.c(597): operands of '=' have incompatible types (int != _Bool) [107]
 d_c99_bool_strict.c(598): operands of '=' have incompatible types (double != _Bool) [107]
@@ -146,4 +160,5 @@ d_c99_bool_strict.c(670): operands of '=
 d_c99_bool_strict.c(677): operands of '=' have incompatible types (_Bool != int) [107]
 d_c99_bool_strict.c(652): warning: argument flags unused in function strict_bool_bitwise_and_enum [231]
 d_c99_bool_strict.c(716): operands of '==' have incompatible types (_Bool != int) [107]
+d_c99_bool_strict.c(728): warning: expression has null effect [129]
 d_c99_bool_strict.c(740): right operand of '+' must not be bool [337]

Reply via email to