Showing error 2287

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_2_safe.cil.c
Line in file: 9
Project: SV-COMP 2013
Project version: 2.6.28
Tools: Manual Work
Entered: 2013-01-17 16:57:54 UTC


Source:

  1extern int __VERIFIER_nondet_int();
  2
  3
  4void error(void) 
  5{ 
  6
  7  {
  8  goto ERROR;
  9  ERROR: ;
 10  return;
 11}
 12}
 13
 14int q_buf_0  ;
 15int q_free  ;
 16int q_read_ev  ;
 17int q_write_ev  ;
 18int q_req_up  ;
 19int q_ev  ;
 20void update_fifo_q(void) 
 21{ 
 22
 23  {
 24  if ((int )q_free == 0) {
 25    q_write_ev = 0;
 26  } else {
 27
 28  }
 29  if ((int )q_free == 1) {
 30    q_read_ev = 0;
 31  } else {
 32
 33  }
 34  q_ev = 0;
 35  q_req_up = 0;
 36
 37  return;
 38}
 39}
 40int p_num_write  ;
 41int p_last_write  ;
 42int p_dw_st  ;
 43int p_dw_pc  ;
 44int p_dw_i  ;
 45int c_num_read  ;
 46int c_last_read  ;
 47int c_dr_st  ;
 48int c_dr_pc  ;
 49int c_dr_i  ;
 50int is_do_write_p_triggered(void) 
 51{ int __retres1 ;
 52
 53  {
 54  if ((int )p_dw_pc == 1) {
 55    if ((int )q_read_ev == 1) {
 56      __retres1 = 1;
 57      goto return_label;
 58    } else {
 59
 60    }
 61  } else {
 62
 63  }
 64  __retres1 = 0;
 65  return_label: /* CIL Label */ 
 66  return (__retres1);
 67}
 68}
 69int is_do_read_c_triggered(void) 
 70{ int __retres1 ;
 71
 72  {
 73  if ((int )c_dr_pc == 1) {
 74    if ((int )q_write_ev == 1) {
 75      __retres1 = 1;
 76      goto return_label;
 77    } else {
 78
 79    }
 80  } else {
 81
 82  }
 83  __retres1 = 0;
 84  return_label: /* CIL Label */ 
 85  return (__retres1);
 86}
 87}
 88void immediate_notify_threads(void) 
 89{ int tmp ;
 90  int tmp___0 ;
 91
 92  {
 93  {
 94  tmp = is_do_write_p_triggered();
 95  }
 96  if (tmp) {
 97    p_dw_st = 0;
 98  } else {
 99
100  }
101  {
102  tmp___0 = is_do_read_c_triggered();
103  }
104  if (tmp___0) {
105    c_dr_st = 0;
106  } else {
107
108  }
109
110  return;
111}
112}
113void do_write_p(void) 
114{ 
115
116  {
117  if ((int )p_dw_pc == 0) {
118    goto DW_ENTRY;
119  } else {
120    if ((int )p_dw_pc == 1) {
121      goto DW_WAIT_READ;
122    } else {
123
124    }
125  }
126  DW_ENTRY: 
127  {
128  while (1) {
129    while_0_continue: /* CIL Label */ ;
130    if ((int )q_free == 0) {
131      p_dw_st = 2;
132      p_dw_pc = 1;
133
134      goto return_label;
135      DW_WAIT_READ: ;
136    } else {
137
138    }
139    {
140      q_buf_0 = __VERIFIER_nondet_int();
141    p_last_write = q_buf_0;
142    p_num_write += 1;
143    q_free = 0;
144    q_req_up = 1;
145    }
146  }
147  while_0_break: /* CIL Label */ ;
148  }
149  return_label: /* CIL Label */ 
150  return;
151}
152}
153static int a_t  ;
154void do_read_c(void) 
155{ int a ;
156
157  {
158  if ((int )c_dr_pc == 0) {
159    goto DR_ENTRY;
160  } else {
161    if ((int )c_dr_pc == 1) {
162      goto DR_WAIT_WRITE;
163    } else {
164
165    }
166  }
167  DR_ENTRY: 
168  {
169  while (1) {
170    while_1_continue: /* CIL Label */ ;
171    if ((int )q_free == 1) {
172      c_dr_st = 2;
173      c_dr_pc = 1;
174      a_t = a;
175
176      goto return_label;
177      DR_WAIT_WRITE: 
178      a = a_t;
179    } else {
180
181    }
182    a = q_buf_0;
183    c_last_read = a;
184    c_num_read += 1;
185    q_free = 1;
186    q_req_up = 1;
187    if (p_last_write == c_last_read) {
188      if (p_num_write == c_num_read) {
189
190      } else {
191        {
192        error();
193        }
194      }
195    } else {
196      {
197      error();
198      }
199    }
200  }
201  while_1_break: /* CIL Label */ ;
202  }
203  return_label: /* CIL Label */ 
204  return;
205}
206}
207void update_channels(void) 
208{ 
209
210  {
211  if ((int )q_req_up == 1) {
212    {
213    update_fifo_q();
214    }
215  } else {
216
217  }
218
219  return;
220}
221}
222void init_threads(void) 
223{ 
224
225  {
226  if ((int )p_dw_i == 1) {
227    p_dw_st = 0;
228  } else {
229    p_dw_st = 2;
230  }
231  if ((int )c_dr_i == 1) {
232    c_dr_st = 0;
233  } else {
234    c_dr_st = 2;
235  }
236
237  return;
238}
239}
240int exists_runnable_thread(void) 
241{ int __retres1 ;
242
243  {
244  if ((int )p_dw_st == 0) {
245    __retres1 = 1;
246    goto return_label;
247  } else {
248    if ((int )c_dr_st == 0) {
249      __retres1 = 1;
250      goto return_label;
251    } else {
252
253    }
254  }
255  __retres1 = 0;
256  return_label: /* CIL Label */ 
257  return (__retres1);
258}
259}
260void fire_delta_events(void) 
261{ 
262
263  {
264  if ((int )q_read_ev == 0) {
265    q_read_ev = 1;
266  } else {
267
268  }
269  if ((int )q_write_ev == 0) {
270    q_write_ev = 1;
271  } else {
272
273  }
274
275  return;
276}
277}
278void reset_delta_events(void) 
279{ 
280
281  {
282  if ((int )q_read_ev == 1) {
283    q_read_ev = 2;
284  } else {
285
286  }
287  if ((int )q_write_ev == 1) {
288    q_write_ev = 2;
289  } else {
290
291  }
292
293  return;
294}
295}
296void activate_threads(void) 
297{ int tmp ;
298  int tmp___0 ;
299
300  {
301  {
302  tmp = is_do_write_p_triggered();
303  }
304  if (tmp) {
305    p_dw_st = 0;
306  } else {
307
308  }
309  {
310  tmp___0 = is_do_read_c_triggered();
311  }
312  if (tmp___0) {
313    c_dr_st = 0;
314  } else {
315
316  }
317
318  return;
319}
320}
321void eval(void) 
322{ int tmp ;
323  int tmp___0 ;
324  int tmp___1 ;
325
326  {
327  {
328  while (1) {
329    while_2_continue: /* CIL Label */ ;
330    {
331    tmp___1 = exists_runnable_thread();
332    }
333    if (tmp___1) {
334
335    } else {
336      goto while_2_break;
337    }
338    if ((int )p_dw_st == 0) {
339      {
340        tmp = __VERIFIER_nondet_int();
341      }
342      if (tmp) {
343        {
344        p_dw_st = 1;
345        do_write_p();
346        }
347      } else {
348
349      }
350    } else {
351
352    }
353    if ((int )c_dr_st == 0) {
354      {
355        tmp___0 = __VERIFIER_nondet_int();
356      }
357      if (tmp___0) {
358        {
359        c_dr_st = 1;
360        do_read_c();
361        }
362      } else {
363
364      }
365    } else {
366
367    }
368  }
369  while_2_break: /* CIL Label */ ;
370  }
371
372  return;
373}
374}
375int stop_simulation(void) 
376{ int tmp ;
377  int __retres2 ;
378
379  {
380  {
381  tmp = exists_runnable_thread();
382  }
383  if (tmp) {
384    __retres2 = 0;
385    goto return_label;
386  } else {
387
388  }
389  __retres2 = 1;
390  return_label: /* CIL Label */ 
391  return (__retres2);
392}
393}
394void start_simulation(void) 
395{ int kernel_st ;
396  int tmp ;
397
398  {
399  {
400  kernel_st = 0;
401  update_channels();
402  init_threads();
403  fire_delta_events();
404  activate_threads();
405  reset_delta_events();
406  }
407  {
408  while (1) {
409    while_3_continue: /* CIL Label */ ;
410    {
411    kernel_st = 1;
412    eval();
413    }
414    {
415    kernel_st = 2;
416    update_channels();
417    }
418    {
419    kernel_st = 3;
420    fire_delta_events();
421    activate_threads();
422    reset_delta_events();
423    tmp = stop_simulation();
424    }
425    if (tmp) {
426      goto while_3_break;
427    } else {
428
429    }
430  }
431  while_3_break: /* CIL Label */ ;
432  }
433
434  return;
435}
436}
437void init_model(void) 
438{ 
439
440  {
441  q_free = 1;
442  q_write_ev = 2;
443  q_read_ev = q_write_ev;
444  p_num_write = 0;
445  p_dw_pc = 0;
446  p_dw_i = 1;
447  c_num_read = 0;
448  c_dr_pc = 0;
449  c_dr_i = 1;
450
451  return;
452}
453}
454int main(void) 
455{ int __retres1 ;
456
457  {
458  {
459  init_model();
460  start_simulation();
461  }
462  __retres1 = 0;
463  return (__retres1);
464}
465}