2 #include "analyzer-decls.h"
4 typedef void (*fn_ptr_t
) (void *);
7 calls_free (void *victim
)
9 free (victim
); /* { dg-warning "double-'free' of 'victim'" } */
18 void test_1 (void *ptr
)
20 fn_ptr_t fn_ptr
= calls_free
;
21 __analyzer_eval (fn_ptr
== calls_free
); /* { dg-warning "TRUE" } */
22 __analyzer_eval (fn_ptr
!= NULL
); /* { dg-warning "TRUE" } */
23 __analyzer_eval (fn_ptr
== NULL
); /* { dg-warning "FALSE" } */
24 __analyzer_eval (fn_ptr
== no_op
); /* { dg-warning "FALSE" } */
30 /* As above, but with an extra indirection to try to thwart
33 void test_2 (void *ptr
, fn_ptr_t
*fn_ptr
)
36 __analyzer_eval (*fn_ptr
== calls_free
); /* { dg-warning "TRUE" } */
37 __analyzer_eval (*fn_ptr
!= NULL
); /* { dg-warning "TRUE" } */
38 __analyzer_eval (*fn_ptr
== NULL
); /* { dg-warning "FALSE" } */
39 __analyzer_eval (*fn_ptr
== no_op
); /* { dg-warning "FALSE" } */