Home | History | Annotate | Line # | Download | only in lint1
msg_348.c revision 1.2
      1 /*	$NetBSD: msg_348.c,v 1.2 2021/10/31 23:15:44 rillig Exp $	*/
      2 # 3 "msg_348.c"
      3 
      4 // Test for message 348: maximum value %d of '%s' does not match maximum array index %d [348]
      5 
      6 enum color {
      7 	red,
      8 	green,
      9 	blue
     10 };
     11 
     12 const char *
     13 color_name(enum color color)
     14 {
     15 	static const char *name[] = {
     16 	    "red",
     17 	    "green",
     18 	    "blue"
     19 	};
     20 	/* No warning since the maximum enum value matches the array size. */
     21 	return name[color];
     22 }
     23 
     24 const char *
     25 color_name_too_few(enum color color)
     26 {
     27 	static const char *name[] = {
     28 	    "red",
     29 	    "green"
     30 	};
     31 	/* expect+1: warning: maximum value 2 of 'enum color' does not match maximum array index 1 [348] */
     32 	return name[color];
     33 }
     34 
     35 const char *
     36 color_name_too_many(enum color color)
     37 {
     38 	static const char *name[] = {
     39 	    "red",
     40 	    "green",
     41 	    "blue",
     42 	    "black"
     43 	};
     44 	/* expect+1: warning: maximum value 2 of 'enum color' does not match maximum array index 3 [348] */
     45 	return name[color];
     46 }
     47 
     48 const char *
     49 color_name_computed_index(enum color color)
     50 {
     51 	static const char *name[] = {
     52 	    "unused",
     53 	    "red",
     54 	    "green",
     55 	    "blue"
     56 	};
     57 	/* No warning since the array index is not a name. */
     58 	return name[color + 1];
     59 }
     60 
     61 const char *
     62 color_name_cast_from_int(int c)
     63 {
     64 	static const char *name[] = {
     65 	    "unused",
     66 	    "red",
     67 	    "green",
     68 	    "blue"
     69 	};
     70 	/* No warning since the array index before conversion is not a name. */
     71 	return name[(enum color)(c + 1)];
     72 }
     73 
     74 const char *
     75 color_name_explicit_cast_to_int(enum color color)
     76 {
     77 	static const char *name[] = {
     78 	    "red",
     79 	    "green",
     80 	};
     81 	/* expect+1: warning: maximum value 2 of 'enum color' does not match maximum array index 1 [348] */
     82 	return name[(int)color];
     83 }
     84 
     85 const char *
     86 color_name_computed_pointer(enum color color, const char *name)
     87 {
     88 	/* No warning since 'name' is not an array. */
     89 	return (&name)[color];
     90 }
     91 
     92 extern const char *incomplete_color_name[];
     93 
     94 const char *
     95 color_name_incomplete_array(enum color color)
     96 {
     97 	/* No warning since 'incomplete_color_name' is incomplete. */
     98 	return incomplete_color_name[color];
     99 }
    100 
    101 enum large {
    102 	/* expect+1: warning: integral constant too large [56] */
    103 	min = -1LL << 40,
    104 	/* expect+1: warning: integral constant too large [56] */
    105 	max = 1LL << 40,
    106 	zero = 0
    107 };
    108 
    109 const char *
    110 large_name(enum large large)
    111 {
    112 	static const char *name[] = {
    113 	    "dummy",
    114 	};
    115 	/* No warning since at least 1 enum constant is outside of INT. */
    116 	return name[large];
    117 }
    118