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