Home | History | Annotate | Line # | Download | only in lint1
msg_230_uchar.c revision 1.8
      1  1.8  rillig /*	$NetBSD: msg_230_uchar.c,v 1.8 2022/03/14 20:25:26 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_230_uchar.c"
      3  1.1  rillig 
      4  1.6  rillig // Test for message: nonportable character comparison '%s %d' [230]
      5  1.1  rillig 
      6  1.1  rillig /* lint1-flags: -S -g -p -w */
      7  1.2  rillig /* lint1-only-if: uchar */
      8  1.1  rillig 
      9  1.4  rillig /*
     10  1.4  rillig  * C11 6.2.5p15 defines that 'char' has the same range, representation, and
     11  1.4  rillig  * behavior as either 'signed char' or 'unsigned char'.
     12  1.4  rillig  *
     13  1.4  rillig  * The portable range of 'char' is from 0 to 127 since all lint platforms
     14  1.4  rillig  * define CHAR_SIZE to be 8.
     15  1.4  rillig  *
     16  1.4  rillig  * See msg_162.c, which covers 'signed char' and 'unsigned char'.
     17  1.4  rillig  */
     18  1.4  rillig 
     19  1.4  rillig void
     20  1.4  rillig compare_plain_char(char c)
     21  1.4  rillig {
     22  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== -129' [230] */
     23  1.4  rillig 	if (c == -129)
     24  1.4  rillig 		return;
     25  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== -128' [230] */
     26  1.4  rillig 	if (c == -128)
     27  1.4  rillig 		return;
     28  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== -1' [230] */
     29  1.4  rillig 	if (c == -1)
     30  1.4  rillig 		return;
     31  1.4  rillig 	if (c == 0)
     32  1.4  rillig 		return;
     33  1.4  rillig 	if (c == 127)
     34  1.4  rillig 		return;
     35  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== 128' [230] */
     36  1.4  rillig 	if (c == 128)
     37  1.4  rillig 		return;
     38  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== 255' [230] */
     39  1.4  rillig 	if (c == 255)
     40  1.4  rillig 		return;
     41  1.5  rillig 	/* expect+1: warning: nonportable character comparison '== 256' [230] */
     42  1.4  rillig 	if (c == 256)
     43  1.4  rillig 		return;
     44  1.4  rillig }
     45  1.4  rillig 
     46  1.4  rillig void
     47  1.4  rillig compare_plain_char_yoda(char c)
     48  1.4  rillig {
     49  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== -129' [230] */
     50  1.4  rillig 	if (-129 == c)
     51  1.4  rillig 		return;
     52  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== -128' [230] */
     53  1.4  rillig 	if (-128 == c)
     54  1.4  rillig 		return;
     55  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== -1' [230] */
     56  1.4  rillig 	if (-1 == c)
     57  1.4  rillig 		return;
     58  1.4  rillig 	if (0 == c)
     59  1.4  rillig 		return;
     60  1.4  rillig 	if (127 == c)
     61  1.4  rillig 		return;
     62  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== 128' [230] */
     63  1.4  rillig 	if (128 == c)
     64  1.4  rillig 		return;
     65  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== 255' [230] */
     66  1.4  rillig 	if (255 == c)
     67  1.4  rillig 		return;
     68  1.7  rillig 	/* expect+1: warning: nonportable character comparison '== 256' [230] */
     69  1.4  rillig 	if (256 == c)
     70  1.4  rillig 		return;
     71  1.4  rillig }
     72  1.4  rillig 
     73  1.4  rillig void
     74  1.7  rillig compare_greater(char c)
     75  1.1  rillig {
     76  1.4  rillig 
     77  1.5  rillig 	/* expect+1: warning: nonportable character comparison '> -2' [230] */
     78  1.4  rillig 	if (c > -2)
     79  1.1  rillig 		return;
     80  1.5  rillig 	/* expect+1: warning: nonportable character comparison '>= -1' [230] */
     81  1.4  rillig 	if (c >= -1)
     82  1.1  rillig 		return;
     83  1.4  rillig 
     84  1.4  rillig 	/*
     85  1.4  rillig 	 * XXX: The following two comparisons have the same effect, yet lint
     86  1.4  rillig 	 * only warns about one of them.
     87  1.4  rillig 	 */
     88  1.5  rillig 	/* expect+1: warning: nonportable character comparison '> -1' [230] */
     89  1.4  rillig 	if (c > -1)
     90  1.4  rillig 		return;
     91  1.4  rillig 	/*
     92  1.4  rillig 	 * This warning only occurs on uchar platforms since on these
     93  1.4  rillig 	 * platforms it is always true.  Code that needs this ordered
     94  1.4  rillig 	 * comparison on values of type plain char is questionable since it
     95  1.4  rillig 	 * behaves differently depending on the platform.  Such a comparison
     96  1.4  rillig 	 * should never be needed.
     97  1.4  rillig 	 */
     98  1.4  rillig 	/* expect+1: warning: comparison of char with 0, op >= [162] */
     99  1.4  rillig 	if (c >= 0)
    100  1.1  rillig 		return;
    101  1.1  rillig 
    102  1.1  rillig 	/*
    103  1.4  rillig 	 * XXX: The following two comparisons have the same effect, yet lint
    104  1.4  rillig 	 * only warns about one of them.
    105  1.3  rillig 	 */
    106  1.4  rillig 	if (c > 127)
    107  1.1  rillig 		return;
    108  1.5  rillig 	/* expect+1: warning: nonportable character comparison '>= 128' [230] */
    109  1.4  rillig 	if (c >= 128)
    110  1.4  rillig 		return;
    111  1.4  rillig 
    112  1.5  rillig 	/* expect+1: warning: nonportable character comparison '> 128' [230] */
    113  1.4  rillig 	if (c > 128)
    114  1.1  rillig 		return;
    115  1.5  rillig 	/* expect+1: warning: nonportable character comparison '>= 129' [230] */
    116  1.4  rillig 	if (c >= 129)
    117  1.1  rillig 		return;
    118  1.1  rillig }
    119  1.7  rillig 
    120  1.7  rillig void
    121  1.7  rillig compare_with_character_literal(char ch)
    122  1.7  rillig {
    123  1.7  rillig 	/*
    124  1.7  rillig 	 * These comparisons are portable since the character constant is
    125  1.7  rillig 	 * interpreted using the type 'char' on the exact same platform as
    126  1.7  rillig 	 * where the comparison takes place.
    127  1.7  rillig 	 */
    128  1.8  rillig 	/* expect+1: warning: nonportable character comparison '== 128' [230] */
    129  1.7  rillig 	if (ch == '\200')
    130  1.7  rillig 		return;
    131  1.8  rillig 	/* expect+1: warning: nonportable character comparison '== 255' [230] */
    132  1.7  rillig 	if (ch == '\377')
    133  1.7  rillig 		return;
    134  1.7  rillig 	if (ch == '\000')
    135  1.7  rillig 		return;
    136  1.7  rillig }
    137