User: | Jiri Slaby |
Error type: | Reachable Error Location |
Error type description: | A specified error location is reachable in some program path |
File location: | systemc/pc_sfifo_1.cil.c |
Line in file: | 14 |
Project: | SV-COMP 2012 |
Tools: |
Manual Work
|
Entered: | 2012-11-19 13:47:39 UTC |
1/*int nondet(void) 2{ 3 int x; 4 { 5 return (x); 6 } 7 }*/ 8 9void error(void) 10{ 11 12 { 13 goto ERROR; 14 ERROR: ; 15 return; 16} 17} 18 19int q_buf_0 ; 20int q_free ; 21int q_read_ev ; 22int q_write_ev ; 23int p_num_write ; 24int p_last_write ; 25int p_dw_st ; 26int p_dw_pc ; 27int p_dw_i ; 28int c_num_read ; 29int c_last_read ; 30int c_dr_st ; 31int c_dr_pc ; 32int c_dr_i ; 33int is_do_write_p_triggered(void) 34{ int __retres1 ; 35 36 { 37 if ((int )p_dw_pc == 1) { 38 if ((int )q_read_ev == 1) { 39 __retres1 = 1; 40 goto return_label; 41 } else { 42 43 } 44 } else { 45 46 } 47 __retres1 = 0; 48 return_label: /* CIL Label */ 49 return (__retres1); 50} 51} 52int is_do_read_c_triggered(void) 53{ int __retres1 ; 54 55 { 56 if ((int )c_dr_pc == 1) { 57 if ((int )q_write_ev == 1) { 58 __retres1 = 1; 59 goto return_label; 60 } else { 61 62 } 63 } else { 64 65 } 66 __retres1 = 0; 67 return_label: /* CIL Label */ 68 return (__retres1); 69} 70} 71void immediate_notify_threads(void) 72{ int tmp ; 73 int tmp___0 ; 74 75 { 76 { 77 tmp = is_do_write_p_triggered(); 78 } 79 if (tmp) { 80 p_dw_st = 0; 81 } else { 82 83 } 84 { 85 tmp___0 = is_do_read_c_triggered(); 86 } 87 if (tmp___0) { 88 c_dr_st = 0; 89 } else { 90 91 } 92 93 return; 94} 95} 96void do_write_p(void) 97{ 98 99// int __VERIFIER_nondet_int(); 100 101 { 102 if ((int )p_dw_pc == 0) { 103 goto DW_ENTRY; 104 } else { 105 if ((int )p_dw_pc == 1) { 106 goto DW_WAIT_READ; 107 } else { 108 109 } 110 } 111 DW_ENTRY: 112 { 113 while (1) { 114 while_0_continue: /* CIL Label */ ; 115 if ((int )q_free == 0) { 116 p_dw_st = 2; 117 p_dw_pc = 1; 118 119 goto return_label; 120 DW_WAIT_READ: ; 121 } else { 122 123 } 124 { 125 q_buf_0 = __VERIFIER_nondet_int(); 126 p_last_write = q_buf_0; 127 p_num_write += 1; 128 q_free = 0; 129 q_write_ev = 1; 130 immediate_notify_threads(); 131 q_write_ev = 2; 132 } 133 } 134 while_0_break: /* CIL Label */ ; 135 } 136 return_label: /* CIL Label */ 137 return; 138} 139} 140static int a_t ; 141void do_read_c(void) 142{ int a ; 143 144 { 145 if ((int )c_dr_pc == 0) { 146 goto DR_ENTRY; 147 } else { 148 if ((int )c_dr_pc == 1) { 149 goto DR_WAIT_WRITE; 150 } else { 151 152 } 153 } 154 DR_ENTRY: 155 { 156 while (1) { 157 while_1_continue: /* CIL Label */ ; 158 if ((int )q_free == 1) { 159 c_dr_st = 2; 160 c_dr_pc = 1; 161 a_t = a; 162 163 goto return_label; 164 DR_WAIT_WRITE: 165 a = a_t; 166 } else { 167 168 } 169 { 170 a = q_buf_0; 171 c_last_read = a; 172 c_num_read += 1; 173 q_free = 1; 174 q_read_ev = 1; 175 immediate_notify_threads(); 176 q_read_ev = 2; 177 } 178 if (p_last_write == c_last_read) { 179 if (p_num_write == c_num_read) { 180 181 } else { 182 { 183 error(); 184 } 185 } 186 } else { 187 { 188 error(); 189 } 190 } 191 } 192 while_1_break: /* CIL Label */ ; 193 } 194 return_label: /* CIL Label */ 195 return; 196} 197} 198void init_threads(void) 199{ 200 201 { 202 if ((int )p_dw_i == 1) { 203 p_dw_st = 0; 204 } else { 205 p_dw_st = 2; 206 } 207 if ((int )c_dr_i == 1) { 208 c_dr_st = 0; 209 } else { 210 c_dr_st = 2; 211 } 212 213 return; 214} 215} 216int exists_runnable_thread(void) 217{ int __retres1 ; 218 219 { 220 if ((int )p_dw_st == 0) { 221 __retres1 = 1; 222 goto return_label; 223 } else { 224 if ((int )c_dr_st == 0) { 225 __retres1 = 1; 226 goto return_label; 227 } else { 228 229 } 230 } 231 __retres1 = 0; 232 return_label: /* CIL Label */ 233 return (__retres1); 234} 235} 236void eval(void) 237{ int tmp ; 238 int tmp___0 ; 239 int tmp___1 ; 240// int __VERIFIER_nondet_int(); 241 242 { 243 { 244 while (1) { 245 while_2_continue: /* CIL Label */ ; 246 { 247 tmp___1 = exists_runnable_thread(); 248 } 249 if (tmp___1) { 250 251 } else { 252 goto while_2_break; 253 } 254 if ((int )p_dw_st == 0) { 255 { 256 tmp = __VERIFIER_nondet_int(); 257 } 258 if (tmp) { 259 { 260 p_dw_st = 1; 261 do_write_p(); 262 } 263 } else { 264 265 } 266 } else { 267 268 } 269 if ((int )c_dr_st == 0) { 270 { 271 tmp___0 = __VERIFIER_nondet_int(); 272 } 273 if (tmp___0) { 274 { 275 c_dr_st = 1; 276 do_read_c(); 277 } 278 } else { 279 280 } 281 } else { 282 283 } 284 } 285 while_2_break: /* CIL Label */ ; 286 } 287 288 return; 289} 290} 291int stop_simulation(void) 292{ int tmp ; 293 int __retres2 ; 294 295 { 296 { 297 tmp = exists_runnable_thread(); 298 } 299 if (tmp) { 300 __retres2 = 0; 301 goto return_label; 302 } else { 303 304 } 305 __retres2 = 1; 306 return_label: /* CIL Label */ 307 return (__retres2); 308} 309} 310void start_simulation(void) 311{ int kernel_st ; 312 int tmp ; 313 314 { 315 { 316 kernel_st = 0; 317 init_threads(); 318 } 319 { 320 while (1) { 321 while_3_continue: /* CIL Label */ ; 322 { 323 kernel_st = 1; 324 eval(); 325 tmp = stop_simulation(); 326 } 327 if (tmp) { 328 goto while_3_break; 329 } else { 330 331 } 332 } 333 while_3_break: /* CIL Label */ ; 334 } 335 336 return; 337} 338} 339void init_model(void) 340{ 341 342 { 343 q_free = 1; 344 q_write_ev = 2; 345 q_read_ev = q_write_ev; 346 p_num_write = 0; 347 p_dw_pc = 0; 348 p_dw_i = 1; 349 c_num_read = 0; 350 c_dr_pc = 0; 351 c_dr_i = 1; 352 353 return; 354} 355} 356int main(void) 357{ int __retres1 ; 358 359 { 360 { 361 init_model(); 362 start_simulation(); 363 } 364 __retres1 = 0; 365 return (__retres1); 366} 367}