mirror of git://gcc.gnu.org/git/gcc.git
68 lines
2.0 KiB
C
68 lines
2.0 KiB
C
/* { dg-do compile } */
|
|
/* { dg-options "-O2 -fdump-tree-isolate-paths -fdelete-null-pointer-checks -Wnull-dereference" } */
|
|
/* { dg-skip-if "" keeps_null_pointer_checks } */
|
|
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
extern void *memset (void *__s, int __c, size_t __n)
|
|
__attribute__ ((__nothrow__, __leaf__)) __attribute__ ((__nonnull__ (1)));
|
|
struct rtx_def;
|
|
typedef struct rtx_def *rtx;
|
|
typedef struct VEC_rtx_base
|
|
|
|
{
|
|
unsigned num;
|
|
unsigned alloc;
|
|
rtx vec[1];
|
|
} VEC_rtx_base;
|
|
static __inline__ rtx *
|
|
VEC_rtx_base_address (VEC_rtx_base * vec_)
|
|
{
|
|
return vec_ ? vec_->vec : 0;
|
|
}
|
|
typedef struct VEC_rtx_gc
|
|
{
|
|
VEC_rtx_base base;
|
|
} VEC_rtx_gc;
|
|
|
|
static __inline__ void
|
|
VEC_rtx_gc_safe_grow (VEC_rtx_gc ** vec_, int size_, const char *file_,
|
|
unsigned line_, const char *function_)
|
|
{
|
|
((*vec_) ? &(*vec_)->base : 0)->num = size_; /* { dg-warning "null pointer dereference" } */
|
|
}
|
|
|
|
static __inline__ void
|
|
VEC_rtx_gc_safe_grow_cleared (VEC_rtx_gc ** vec_, int size_,
|
|
const char *file_, unsigned line_,
|
|
const char *function_, int oldsize)
|
|
{
|
|
VEC_rtx_gc_safe_grow (vec_, size_, file_, line_, function_);
|
|
memset (&(VEC_rtx_base_address ((*vec_) ? &(*vec_)->base : 0))[oldsize], 0,
|
|
sizeof (rtx) * (size_ - oldsize));
|
|
}
|
|
|
|
static VEC_rtx_gc *reg_base_value;
|
|
unsigned int max_reg_num (void);
|
|
int arf (void);
|
|
void
|
|
init_alias_analysis (void)
|
|
{
|
|
unsigned int maxreg = max_reg_num ();
|
|
(VEC_rtx_gc_safe_grow_cleared
|
|
(&(reg_base_value), maxreg, "../../../gcc-4.6.0/gcc/alias.c", 2755,
|
|
__FUNCTION__, arf ()));
|
|
}
|
|
|
|
|
|
|
|
/* This is an example of how a NULL pointer dereference can show up
|
|
without a PHI. Note VEC_rtx_gcc_safe_grow. If an earlier pass
|
|
(such as VRP) isolates the NULL path for some reason or another
|
|
we end up with an explicit NULL dereference in the IL. Yes, it
|
|
started with a PHI, but by the time the path isolation code runs
|
|
its explicit in the IL. */
|
|
/* { dg-final { scan-tree-dump-times "__builtin_trap" 1 "isolate-paths"} } */
|
|
|
|
|