[L3888] 0 pthread_t t1,t2; [L3950] CALL, EXPR 0 my_drv_init() [L3944] 0 return 0; [L3950] RET, EXPR 0 my_drv_init() [L3950] 0 int ret = my_drv_init(); [L3951] COND TRUE 0 ret==0 [L3952] 0 int probe_ret; [L3953] 0 struct my_data data; [L3954] CALL, EXPR 0 my_drv_probe(&data) [L3920] 0 struct device *d = &data->dev; [L3924] 0 data->shared.a = 0 [L3925] 0 data->shared.b = 0 [L3926] 0 int res = __VERIFIER_nondet_int(); [L3927] COND FALSE 0 !(\read(res)) [L3930] FCALL, FORK 0 pthread_create(&t1, ((void *)0), my_callback, (void *)d) VAL [\old(arg)={5:24}, \old(data)={5:0}, d={5:24}, data={5:0}, res=0, t1=-1, t2=0] [L3902] 1 struct device *dev = (struct device*)arg; [L3903] 1 struct my_data *data; [L3904] 1 const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); [L3904] 1 { const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); (struct my_data *)( (char *)__mptr - __builtin_offsetof (struct my_data, dev) );} [L3904] 1 data = ({ const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); (struct my_data *)( (char *)__mptr - __builtin_offsetof (struct my_data, dev) );}) [L3908] 1 data->shared.a = 1 VAL [\old(arg)={5:24}, arg={5:24}, data={5:0}, dev={5:24}, t1=-1, t2=0] [L3911] EXPR 1 data->shared.b [L3911] 1 int lb = data->shared.b; [L3931] FCALL, FORK 0 pthread_create(&t2, ((void *)0), my_callback, (void *)d) VAL [\old(arg)={5:24}, \old(data)={5:0}, arg={5:24}, d={5:24}, data={5:0}, data={5:0}, dev={5:24}, lb=0, res=0, t1=-1, t2=0] [L3902] 2 struct device *dev = (struct device*)arg; [L3903] 2 struct my_data *data; [L3904] 2 const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); [L3904] 2 { const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); (struct my_data *)( (char *)__mptr - __builtin_offsetof (struct my_data, dev) );} [L3904] 2 data = ({ const typeof( ((struct my_data *)0)->dev ) *__mptr = (dev); (struct my_data *)( (char *)__mptr - __builtin_offsetof (struct my_data, dev) );}) [L3908] 2 data->shared.a = 1 VAL [\old(arg)={5:24}, arg={5:24}, data={5:0}, dev={5:24}, lb=0, t1=-1, t2=0] [L3911] EXPR 2 data->shared.b [L3911] 2 int lb = data->shared.b; [L3914] 2 data->shared.b = lb + 1 VAL [\old(arg)={5:24}, arg={5:24}, data={5:0}, dev={5:24}, lb=0, t1=-1, t2=0] [L3917] 2 return 0; [L3914] 1 data->shared.b = lb + 1 VAL [\old(arg)={5:24}, \result={0:0}, arg={5:24}, data={5:0}, dev={5:24}, lb=0, t1=-1, t2=0] [L3917] 1 return 0; [L3932] 0 return 0; VAL [\old(arg)={5:24}, \old(data)={5:0}, \result=0, \result={0:0}, arg={5:24}, d={5:24}, data={5:0}, data={5:0}, dev={5:24}, lb=0, res=0, t1=-1, t2=0] [L3954] RET, EXPR 0 my_drv_probe(&data) [L3954] 0 probe_ret = my_drv_probe(&data) [L3955] COND TRUE 0 probe_ret==0 [L3956] CALL 0 my_drv_disconnect(&data) [L3938] 0 void *status; VAL [\old(arg)={5:24}, \old(data)={5:0}, \result={0:0}, arg={5:24}, data={5:0}, data={5:0}, dev={5:24}, lb=0, status={3:0}, t1=-1, t2=0] [L3939] FCALL, JOIN 1 pthread_join(t1, &status) VAL [\old(arg)={5:24}, \old(data)={5:0}, \result={0:0}, arg={5:24}, data={5:0}, data={5:0}, dev={5:24}, lb=0, status={3:0}, t1=-1, t2=0] [L3940] FCALL, JOIN 2 pthread_join(t2, &status) VAL [\old(arg)={5:24}, \old(data)={5:0}, \result={0:0}, arg={5:24}, data={5:0}, data={5:0}, dev={5:24}, lb=0, status={3:0}, t1=-1, t2=0] [L3956] RET 0 my_drv_disconnect(&data) [L3957] EXPR 0 data.shared.a [L3957] CALL 0 ldv_assert(data.shared.a==1) [L3887] COND FALSE 0 !(!expression) VAL [\old(arg)={5:24}, \old(expression)=1, \result={0:0}, arg={5:24}, data={5:0}, dev={5:24}, expression=1, lb=0, t1=-1, t2=0] [L3957] RET 0 ldv_assert(data.shared.a==1) [L3958] EXPR 0 data.shared.b [L3958] CALL 0 ldv_assert(data.shared.b==2) [L3887] COND TRUE 0 !expression VAL [\old(arg)={5:24}, \old(expression)=0, \result={0:0}, arg={5:24}, data={5:0}, dev={5:24}, expression=0, lb=0, t1=-1, t2=0] [L3887] 0 reach_error() VAL [\old(arg)={5:24}, \old(expression)=0, \result={0:0}, arg={5:24}, data={5:0}, dev={5:24}, expression=0, lb=0, t1=-1, t2=0]