modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/pr83510.c (about) 1 /* Various examples of safe array access for which -Warray-bounds 2 shouldn't issue a warning at any optimization level 3 (PR tree-optimization/83510). */ 4 5 /* { dg-options "-Warray-bounds" } */ 6 7 extern int get_flag (void); 8 9 unsigned int arr[10]; 10 11 struct xyz { 12 unsigned int a0; 13 }; 14 15 extern void wfm(struct xyz *, int, unsigned int); 16 17 static unsigned int f(struct xyz * ctx, unsigned int number) 18 { 19 switch (number) { 20 case 0x9: 21 return ctx->a0; 22 case 0xA: case 0xB: 23 case 0xC: case 0xD: case 0xE: case 0xF: 24 case 0x10: case 0x11: case 0x12: case 0x13: 25 return arr[number - 0xa]; 26 } 27 return 0; 28 } 29 30 int g(struct xyz * ctx) { 31 int i; 32 33 for (i = 0; i < 10; i++) { 34 wfm(ctx, i, f(ctx, i)); 35 } 36 37 return 0; 38 } 39 40 static unsigned int f_signed(struct xyz * ctx, int number) 41 { 42 switch (number) { 43 case 0x9: 44 return ctx->a0; 45 case 0xA: case 0xB: 46 case 0xC: case 0xD: case 0xE: case 0xF: 47 case 0x10: case 0x11: case 0x12: case 0x13: 48 return arr[number]; 49 } 50 return 0; 51 } 52 53 int g_signed(struct xyz * ctx) { 54 int i; 55 56 for (i = 0; i < 10; i++) { 57 wfm(ctx, i, f(ctx, i)); 58 } 59 60 return 0; 61 } 62 63 void test_2 (struct xyz * ctx) 64 { 65 int i; 66 67 for (i = 0; i < 10; i++) { 68 if (get_flag ()) 69 wfm(ctx, i, f(ctx, i)); 70 } 71 } 72 73 void test_2_signed (struct xyz * ctx) 74 { 75 int i; 76 77 for (i = 0; i < 10; i++) { 78 if (get_flag ()) 79 wfm(ctx, i, f_signed(ctx, i)); 80 } 81 } 82 83 void test_3 (struct xyz * ctx) 84 { 85 unsigned int i; 86 87 for (i = 0; i < 10; i++) { 88 switch (i) { 89 case 0x9: 90 wfm(ctx, i, ctx->a0); 91 break; 92 case 0xA: case 0xB: 93 case 0xC: case 0xD: case 0xE: case 0xF: 94 case 0x10: case 0x11: case 0x12: case 0x13: 95 if (get_flag ()) 96 wfm(ctx, i, arr[i - 0xa]); 97 break; 98 } 99 } 100 } 101 102 void test_3_signed (struct xyz * ctx) 103 { 104 int i; 105 106 for (i = 0; i < 10; i++) { 107 switch (i) { 108 case 0x9: 109 wfm(ctx, i, ctx->a0); 110 break; 111 case 0xA: case 0xB: 112 case 0xC: case 0xD: case 0xE: case 0xF: 113 case 0x10: case 0x11: case 0x12: case 0x13: 114 if (get_flag ()) 115 wfm(ctx, i, arr[i]); 116 break; 117 } 118 } 119 } 120 121 void test_4 (struct xyz * ctx) 122 { 123 unsigned int i, j; 124 125 for (i = 0; i < 10; i++) { 126 switch (i) { 127 case 0x9: 128 wfm(ctx, i, ctx->a0); 129 break; 130 case 0xA: case 0xB: 131 case 0xC: case 0xD: case 0xE: case 0xF: 132 case 0x10: case 0x11: case 0x12: case 0x13: 133 for (j = 0; j < 5; j++) 134 wfm(ctx, i, arr[i - 0xa]); 135 break; 136 } 137 } 138 } 139 void test_4_signed (struct xyz * ctx) 140 { 141 int i, j; 142 143 for (i = 0; i < 10; i++) { 144 switch (i) { 145 case 0x9: 146 wfm(ctx, i, ctx->a0); 147 break; 148 case 0xA: case 0xB: 149 case 0xC: case 0xD: case 0xE: case 0xF: 150 case 0x10: case 0x11: case 0x12: case 0x13: 151 for (j = 0; j < 5; j++) 152 wfm(ctx, i, arr[i]); 153 break; 154 } 155 } 156 } 157 158 void test_5 (struct xyz * ctx) 159 { 160 unsigned int i; 161 for (i = 10; i < 20; i++) { 162 wfm(ctx, i, arr[i - 10]); 163 } 164 } 165 166 void test_5_signed (struct xyz * ctx) 167 { 168 int i; 169 for (i = 10; i < 20; i++) { 170 wfm(ctx, i, arr[i - 10]); 171 } 172 }