Skip several analyzer socket tests on hppa*-*-hpux*
[official-gcc.git] / gcc / testsuite / c-c++-common / analyzer / function-ptr-2.c
blob0a1e845d6c55f89ee3a0a532bdcd588ec1efdcea
1 #include <stdlib.h>
2 #include "../../gcc.dg/analyzer/analyzer-decls.h"
4 typedef void (*fn_ptr_t) (void *);
6 void
7 calls_free (void *victim)
9 free (victim); /* { dg-warning "double-'free' of 'victim'" } */
13 void
14 no_op (void *ptr)
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" } */
26 fn_ptr (ptr);
27 fn_ptr (ptr);
30 /* As above, but with an extra indirection to try to thwart
31 the optimizer. */
33 void test_2 (void *ptr, fn_ptr_t *fn_ptr)
35 *fn_ptr = calls_free;
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" } */
41 (*fn_ptr) (ptr);
42 (*fn_ptr) (ptr);