Home | History | Annotate | Line # | Download | only in lint1
msg_230_uchar.c revision 1.13
      1  1.13  rillig /*	$NetBSD: msg_230_uchar.c,v 1.13 2023/07/08 11:03:00 rillig Exp $	*/
      2   1.1  rillig # 3 "msg_230_uchar.c"
      3   1.1  rillig 
      4  1.10  rillig // Test for message: nonportable character comparison '%s' [230]
      5   1.1  rillig 
      6  1.13  rillig /* lint1-flags: -S -g -p -w -X 351 */
      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.11  rillig 	/* expect+1: warning: nonportable character comparison '-129 == ?' [230] */
     50   1.4  rillig 	if (-129 == c)
     51   1.4  rillig 		return;
     52  1.11  rillig 	/* expect+1: warning: nonportable character comparison '-128 == ?' [230] */
     53   1.4  rillig 	if (-128 == c)
     54   1.4  rillig 		return;
     55  1.11  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.11  rillig 	/* expect+1: warning: nonportable character comparison '128 == ?' [230] */
     63   1.4  rillig 	if (128 == c)
     64   1.4  rillig 		return;
     65  1.11  rillig 	/* expect+1: warning: nonportable character comparison '255 == ?' [230] */
     66   1.4  rillig 	if (255 == c)
     67   1.4  rillig 		return;
     68  1.11  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.9  rillig 	/* expect+1: warning: operator '>=' compares 'char' with '0' [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.12  rillig /* Comparing a char expression with a character constant is always valid. */
    121   1.7  rillig void
    122   1.7  rillig compare_with_character_literal(char ch)
    123   1.7  rillig {
    124   1.7  rillig 	if (ch == '\200')
    125   1.7  rillig 		return;
    126   1.7  rillig 	if (ch == '\377')
    127   1.7  rillig 		return;
    128   1.7  rillig 	if (ch == '\000')
    129   1.7  rillig 		return;
    130   1.7  rillig }
    131