1 enum e { OK, KO = -1 }; 2 typedef _Bool bool; 3 4 static int test(int i, long l, long long ll, enum e e, bool b, void *p) 5 { 6 int rc = 0; 7 8 // should be OK 9 rc += __builtin_add_overflow(i, i, &i); 10 rc += __builtin_add_overflow(l, i, &i); 11 rc += __builtin_add_overflow(i, l, &i); 12 rc += __builtin_add_overflow(i, i, &l); 13 rc += __builtin_add_overflow(ll, i, &i); 14 rc += __builtin_add_overflow(i, ll, &i); 15 rc += __builtin_add_overflow(i, i, &ll); 16 17 rc += __builtin_add_overflow_p(i, i, i); 18 rc += __builtin_add_overflow_p(l, i, i); 19 rc += __builtin_add_overflow_p(i, l, i); 20 rc += __builtin_add_overflow_p(i, i, l); 21 rc += __builtin_add_overflow_p(ll, i, i); 22 rc += __builtin_add_overflow_p(i, ll, i); 23 rc += __builtin_add_overflow_p(i, i, ll); 24 25 rc += __builtin_sub_overflow(i, i, &i); 26 rc += __builtin_sub_overflow(l, i, &i); 27 rc += __builtin_sub_overflow(i, l, &i); 28 rc += __builtin_sub_overflow(i, i, &l); 29 rc += __builtin_sub_overflow(ll, i, &i); 30 rc += __builtin_sub_overflow(i, ll, &i); 31 rc += __builtin_sub_overflow(i, i, &ll); 32 33 rc += __builtin_sub_overflow_p(i, i, i); 34 rc += __builtin_sub_overflow_p(l, i, i); 35 rc += __builtin_sub_overflow_p(i, l, i); 36 rc += __builtin_sub_overflow_p(i, i, l); 37 rc += __builtin_sub_overflow_p(ll, i, i); 38 rc += __builtin_sub_overflow_p(i, ll, i); 39 rc += __builtin_sub_overflow_p(i, i, ll); 40 41 rc += __builtin_mul_overflow(i, i, &i); 42 rc += __builtin_mul_overflow(l, i, &i); 43 rc += __builtin_mul_overflow(i, l, &i); 44 rc += __builtin_mul_overflow(i, i, &l); 45 rc += __builtin_mul_overflow(ll, i, &i); 46 rc += __builtin_mul_overflow(i, ll, &i); 47 rc += __builtin_mul_overflow(i, i, &ll); 48 49 rc += __builtin_mul_overflow_p(i, i, i); 50 rc += __builtin_mul_overflow_p(l, i, i); 51 rc += __builtin_mul_overflow_p(i, l, i); 52 rc += __builtin_mul_overflow_p(i, i, l); 53 rc += __builtin_mul_overflow_p(ll, i, i); 54 rc += __builtin_mul_overflow_p(i, ll, i); 55 rc += __builtin_mul_overflow_p(i, i, ll); 56 57 // should be KO 58 rc += __builtin_add_overflow(); 59 rc += __builtin_add_overflow(i); 60 rc += __builtin_add_overflow(i, i); 61 rc += __builtin_add_overflow(i, i, &i, i); 62 rc += __builtin_add_overflow(e, i, &i); 63 rc += __builtin_add_overflow(i, e, &i); 64 rc += __builtin_add_overflow(i, i, &e); 65 rc += __builtin_add_overflow(b, i, &i); 66 rc += __builtin_add_overflow(i, b, &i); 67 rc += __builtin_add_overflow(i, i, &b); 68 rc += __builtin_add_overflow(i, i, p); 69 70 rc += __builtin_add_overflow_p(); 71 rc += __builtin_add_overflow_p(i); 72 rc += __builtin_add_overflow_p(i, i); 73 rc += __builtin_add_overflow_p(i, i, i, i); 74 rc += __builtin_add_overflow_p(e, i, i); 75 rc += __builtin_add_overflow_p(i, e, i); 76 rc += __builtin_add_overflow_p(i, i, e); 77 rc += __builtin_add_overflow_p(b, i, i); 78 rc += __builtin_add_overflow_p(i, b, i); 79 rc += __builtin_add_overflow_p(i, i, b); 80 rc += __builtin_add_overflow_p(i, i, p); 81 82 rc += __builtin_sub_overflow(); 83 rc += __builtin_sub_overflow(i); 84 rc += __builtin_sub_overflow(i, i); 85 rc += __builtin_sub_overflow(i, i, &i, i); 86 rc += __builtin_sub_overflow(e, i, &i); 87 rc += __builtin_sub_overflow(i, e, &i); 88 rc += __builtin_sub_overflow(i, i, &e); 89 rc += __builtin_sub_overflow(b, i, &i); 90 rc += __builtin_sub_overflow(i, b, &i); 91 rc += __builtin_sub_overflow(i, i, &b); 92 rc += __builtin_sub_overflow(i, i, p); 93 94 rc += __builtin_sub_overflow_p(); 95 rc += __builtin_sub_overflow_p(i); 96 rc += __builtin_sub_overflow_p(i, i); 97 rc += __builtin_sub_overflow_p(i, i, i, i); 98 rc += __builtin_sub_overflow_p(e, i, i); 99 rc += __builtin_sub_overflow_p(i, e, i); 100 rc += __builtin_sub_overflow_p(i, i, e); 101 rc += __builtin_sub_overflow_p(b, i, i); 102 rc += __builtin_sub_overflow_p(i, b, i); 103 rc += __builtin_sub_overflow_p(i, i, b); 104 rc += __builtin_sub_overflow_p(i, i, p); 105 106 rc += __builtin_mul_overflow(); 107 rc += __builtin_mul_overflow(i); 108 rc += __builtin_mul_overflow(i, i); 109 rc += __builtin_mul_overflow(i, i, &i, i); 110 rc += __builtin_mul_overflow(e, i, &i); 111 rc += __builtin_mul_overflow(i, e, &i); 112 rc += __builtin_mul_overflow(i, i, &e); 113 rc += __builtin_mul_overflow(b, i, &i); 114 rc += __builtin_mul_overflow(i, b, &i); 115 rc += __builtin_mul_overflow(i, i, &b); 116 rc += __builtin_mul_overflow(i, i, p); 117 118 rc += __builtin_mul_overflow_p(); 119 rc += __builtin_mul_overflow_p(i); 120 rc += __builtin_mul_overflow_p(i, i); 121 rc += __builtin_mul_overflow_p(i, i, i, i); 122 rc += __builtin_mul_overflow_p(e, i, i); 123 rc += __builtin_mul_overflow_p(i, e, i); 124 rc += __builtin_mul_overflow_p(i, i, e); 125 rc += __builtin_mul_overflow_p(b, i, i); 126 rc += __builtin_mul_overflow_p(i, b, i); 127 rc += __builtin_mul_overflow_p(i, i, b); 128 rc += __builtin_mul_overflow_p(i, i, p); 129 130 return rc; 131 } 132 133 /* 134 * check-name: builtin-overflow 135 * 136 * check-error-start 137 builtin-overflow.c:58:37: error: not enough arguments for __builtin_add_overflow 138 builtin-overflow.c:59:37: error: not enough arguments for __builtin_add_overflow 139 builtin-overflow.c:60:37: error: not enough arguments for __builtin_add_overflow 140 builtin-overflow.c:61:37: error: too many arguments for __builtin_add_overflow 141 builtin-overflow.c:62:38: error: invalid type for argument 1: 142 builtin-overflow.c:62:38: int enum e e 143 builtin-overflow.c:63:41: error: invalid type for argument 2: 144 builtin-overflow.c:63:41: int enum e e 145 builtin-overflow.c:64:45: error: invalid type for argument 3: 146 builtin-overflow.c:64:45: int enum e * 147 builtin-overflow.c:65:38: error: invalid type for argument 1: 148 builtin-overflow.c:65:38: bool [usertype] b 149 builtin-overflow.c:66:41: error: invalid type for argument 2: 150 builtin-overflow.c:66:41: bool [usertype] b 151 builtin-overflow.c:67:45: error: invalid type for argument 3: 152 builtin-overflow.c:67:45: bool * 153 builtin-overflow.c:68:44: error: invalid type for argument 3: 154 builtin-overflow.c:68:44: void *p 155 builtin-overflow.c:70:39: error: not enough arguments for __builtin_add_overflow_p 156 builtin-overflow.c:71:39: error: not enough arguments for __builtin_add_overflow_p 157 builtin-overflow.c:72:39: error: not enough arguments for __builtin_add_overflow_p 158 builtin-overflow.c:73:39: error: too many arguments for __builtin_add_overflow_p 159 builtin-overflow.c:74:40: error: invalid type for argument 1: 160 builtin-overflow.c:74:40: int enum e [addressable] e 161 builtin-overflow.c:75:43: error: invalid type for argument 2: 162 builtin-overflow.c:75:43: int enum e [addressable] e 163 builtin-overflow.c:76:46: error: invalid type for argument 3: 164 builtin-overflow.c:76:46: int enum e [addressable] e 165 builtin-overflow.c:77:40: error: invalid type for argument 1: 166 builtin-overflow.c:77:40: bool [addressable] [usertype] b 167 builtin-overflow.c:78:43: error: invalid type for argument 2: 168 builtin-overflow.c:78:43: bool [addressable] [usertype] b 169 builtin-overflow.c:79:46: error: invalid type for argument 3: 170 builtin-overflow.c:79:46: bool [addressable] [usertype] b 171 builtin-overflow.c:80:46: error: invalid type for argument 3: 172 builtin-overflow.c:80:46: void *p 173 builtin-overflow.c:82:37: error: not enough arguments for __builtin_sub_overflow 174 builtin-overflow.c:83:37: error: not enough arguments for __builtin_sub_overflow 175 builtin-overflow.c:84:37: error: not enough arguments for __builtin_sub_overflow 176 builtin-overflow.c:85:37: error: too many arguments for __builtin_sub_overflow 177 builtin-overflow.c:86:38: error: invalid type for argument 1: 178 builtin-overflow.c:86:38: int enum e [addressable] e 179 builtin-overflow.c:87:41: error: invalid type for argument 2: 180 builtin-overflow.c:87:41: int enum e [addressable] e 181 builtin-overflow.c:88:45: error: invalid type for argument 3: 182 builtin-overflow.c:88:45: int enum e * 183 builtin-overflow.c:89:38: error: invalid type for argument 1: 184 builtin-overflow.c:89:38: bool [addressable] [usertype] b 185 builtin-overflow.c:90:41: error: invalid type for argument 2: 186 builtin-overflow.c:90:41: bool [addressable] [usertype] b 187 builtin-overflow.c:91:45: error: invalid type for argument 3: 188 builtin-overflow.c:91:45: bool * 189 builtin-overflow.c:92:44: error: invalid type for argument 3: 190 builtin-overflow.c:92:44: void *p 191 builtin-overflow.c:94:39: error: not enough arguments for __builtin_sub_overflow_p 192 builtin-overflow.c:95:39: error: not enough arguments for __builtin_sub_overflow_p 193 builtin-overflow.c:96:39: error: not enough arguments for __builtin_sub_overflow_p 194 builtin-overflow.c:97:39: error: too many arguments for __builtin_sub_overflow_p 195 builtin-overflow.c:98:40: error: invalid type for argument 1: 196 builtin-overflow.c:98:40: int enum e [addressable] e 197 builtin-overflow.c:99:43: error: invalid type for argument 2: 198 builtin-overflow.c:99:43: int enum e [addressable] e 199 builtin-overflow.c:100:46: error: invalid type for argument 3: 200 builtin-overflow.c:100:46: int enum e [addressable] e 201 builtin-overflow.c:101:40: error: invalid type for argument 1: 202 builtin-overflow.c:101:40: bool [addressable] [usertype] b 203 builtin-overflow.c:102:43: error: invalid type for argument 2: 204 builtin-overflow.c:102:43: bool [addressable] [usertype] b 205 builtin-overflow.c:103:46: error: invalid type for argument 3: 206 builtin-overflow.c:103:46: bool [addressable] [usertype] b 207 builtin-overflow.c:104:46: error: invalid type for argument 3: 208 builtin-overflow.c:104:46: void *p 209 builtin-overflow.c:106:37: error: not enough arguments for __builtin_mul_overflow 210 builtin-overflow.c:107:37: error: not enough arguments for __builtin_mul_overflow 211 builtin-overflow.c:108:37: error: not enough arguments for __builtin_mul_overflow 212 builtin-overflow.c:109:37: error: too many arguments for __builtin_mul_overflow 213 builtin-overflow.c:110:38: error: invalid type for argument 1: 214 builtin-overflow.c:110:38: int enum e [addressable] e 215 builtin-overflow.c:111:41: error: invalid type for argument 2: 216 builtin-overflow.c:111:41: int enum e [addressable] e 217 builtin-overflow.c:112:45: error: invalid type for argument 3: 218 builtin-overflow.c:112:45: int enum e * 219 builtin-overflow.c:113:38: error: invalid type for argument 1: 220 builtin-overflow.c:113:38: bool [addressable] [usertype] b 221 builtin-overflow.c:114:41: error: invalid type for argument 2: 222 builtin-overflow.c:114:41: bool [addressable] [usertype] b 223 builtin-overflow.c:115:45: error: invalid type for argument 3: 224 builtin-overflow.c:115:45: bool * 225 builtin-overflow.c:116:44: error: invalid type for argument 3: 226 builtin-overflow.c:116:44: void *p 227 builtin-overflow.c:118:39: error: not enough arguments for __builtin_mul_overflow_p 228 builtin-overflow.c:119:39: error: not enough arguments for __builtin_mul_overflow_p 229 builtin-overflow.c:120:39: error: not enough arguments for __builtin_mul_overflow_p 230 builtin-overflow.c:121:39: error: too many arguments for __builtin_mul_overflow_p 231 builtin-overflow.c:122:40: error: invalid type for argument 1: 232 builtin-overflow.c:122:40: int enum e [addressable] e 233 builtin-overflow.c:123:43: error: invalid type for argument 2: 234 builtin-overflow.c:123:43: int enum e [addressable] e 235 builtin-overflow.c:124:46: error: invalid type for argument 3: 236 builtin-overflow.c:124:46: int enum e [addressable] e 237 builtin-overflow.c:125:40: error: invalid type for argument 1: 238 builtin-overflow.c:125:40: bool [addressable] [usertype] b 239 builtin-overflow.c:126:43: error: invalid type for argument 2: 240 builtin-overflow.c:126:43: bool [addressable] [usertype] b 241 builtin-overflow.c:127:46: error: invalid type for argument 3: 242 builtin-overflow.c:127:46: bool [addressable] [usertype] b 243 builtin-overflow.c:128:46: error: invalid type for argument 3: 244 builtin-overflow.c:128:46: void *p 245 * check-error-end 246 */ 247