Viewing file: aliasing-3.c (1.69 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#include "analyzer-decls.h"
#define NULL ((void *)0)
struct s1 { int f1; };
static struct s1 *p1_glob = NULL;
void test_1 (struct s1 **pp1, struct s1 *p1_parm) { struct s1 *init_p1_glob = p1_glob;
__analyzer_eval (p1_glob == init_p1_glob); /* { dg-warning "TRUE" } */
if (!p1_glob) return;
__analyzer_eval (p1_glob == init_p1_glob); /* { dg-warning "TRUE" } */ __analyzer_eval (p1_glob != NULL); /* { dg-warning "TRUE" } */
*pp1 = p1_parm;
/* The write through *pp1 can't have changed p1_glob, because we never take a pointer to p1_glob (and it's static to this TU). */ __analyzer_eval (p1_glob == init_p1_glob); /* { dg-warning "TRUE" } */ __analyzer_eval (p1_glob != NULL); /* { dg-warning "TRUE" } */ }
struct s2 { int f1; };
static struct s2 *p2_glob = NULL;
void test_2 (struct s2 **pp2, struct s2 *p2_parm) { /* Ensure that p2_glob is modified. */ p2_glob = __builtin_malloc (sizeof (struct s2)); if (!p2_glob) return;
__analyzer_eval (p2_glob != NULL); /* { dg-warning "TRUE" } */
*pp2 = p2_parm;
/* The write through *pp2 can't have changed p2_glob, because we never take a pointer to p2_glob (and it's static to this TU). */ __analyzer_eval (p2_glob != NULL); /* { dg-warning "TRUE" } */ }
struct s3 { int f1; };
struct s3 *p3_glob = NULL;
void test_3 (struct s3 **pp3, struct s3 *p3_parm) { p3_glob = __builtin_malloc (sizeof (struct s3)); if (!p3_glob) return;
__analyzer_eval (p3_glob != NULL); /* { dg-warning "TRUE" } */
*pp3 = p3_parm;
/* The write through *pp3 could have changed p3_glob, because another TU could take a pointer to p3_glob. */ __analyzer_eval (p3_glob != NULL); /* { dg-warning "UNKNOWN" } */ }
|