blob: 39d5c6efb9e268fa995429ce9179b8320f3c0d9e [file] [log] [blame]
/* Should be OK to add a "const" qualifier to a ptr. */
static void __attribute__((noinline))
__analyzer_consume_const_char_ptr (int placeholder, ...)
{
const char *v;
__builtin_va_list ap;
__builtin_va_start (ap, placeholder);
v = __builtin_va_arg (ap, const char *);
__builtin_va_end (ap);
}
void test_char_ptr_to_const_char_ptr (char *p)
{
__analyzer_consume_const_char_ptr (42, p); /* { dg-bogus "" } */
}
/* What about casting away const-ness?
Currently we don't complain. */
static void __attribute__((noinline))
__analyzer_consume_char_ptr (int placeholder, ...)
{
char *v;
__builtin_va_list ap;
__builtin_va_start (ap, placeholder);
v = __builtin_va_arg (ap, char *);
__builtin_va_end (ap);
}
void test_const_char_ptr_to_char_ptr (const char *p)
{
__analyzer_consume_const_char_ptr (42, p);
}
/* What about casting ptrs?
Currently we don't complain. */
struct foo;
struct bar;
static void __attribute__((noinline))
__analyzer_consume_bar_ptr (int placeholder, ...)
{
struct bar *v;
__builtin_va_list ap;
__builtin_va_start (ap, placeholder);
v = __builtin_va_arg (ap, struct bar *);
__builtin_va_end (ap);
}
void test_foo_ptr_to_bar_ptr (struct foo *p)
{
__analyzer_consume_bar_ptr (42, p);
}