1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
  
     | 
    
      /* run.config*
   STDOPT: #"-from-verify-assigns"
*/
void f_valid(int a, int *b, int c);
void f_invalid_direct(int a, int *b, int c);
void f_invalid_address(int a, int *b, int c);
void f_invalid_condition(int a, int *b, int c);
void f_invalid_all(int a, int *b, int c);
void main(void){
  int x = 3;
  int y;
  f_valid(x,&y,1);
  f_invalid_direct(x,&y,1);
  f_invalid_address(x,&y,1);
  f_invalid_condition(x,&y,1);
  f_invalid_all(x,&y,1);
}
/*@ assigns *b \from a, (indirect:c), (indirect:b); */
void f_valid(int a, int *b, int c){
  if(c) {
    *b = a;
  }
  else
    *b = 0;
}
/*@ assigns *b \from (indirect:c), (indirect:b); */
void f_invalid_direct(int a, int *b, int c){
  if(c) {
    *b = a;
  }
  else
    *b = 0;
}
/*@ assigns *b \from a, (indirect:c); */
void f_invalid_address(int a, int *b, int c){
  if(c) {
    *b = a;
  }
  else
    *b = 0;
}
/*@ assigns *b \from a, (indirect:b); */
void f_invalid_condition(int a, int *b, int c){
  if(c) {
    *b = a;
  }
  else
    *b = 0;
}
/*@ assigns *b \from \nothing; */
void f_invalid_all(int a, int *b, int c){
  if(c) {
    *b = a;
  }
  else
    *b = 0;
}
 
     |