blob: a10b623f9818d531be9e6145aa009f207fc95a51 [file] [log] [blame]
// { dg-options "-Wold-style-cast -fdiagnostics-show-caret" }
struct foo {};
struct bar { const foo *field; };
void test_1 (void *ptr)
{
foo *f = (foo *)ptr; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr;
^~~
----------
static_cast<foo *> (ptr)
{ dg-end-multiline-output "" } */
}
void test_2 (const foo *ptr)
{
foo *f = (foo *)ptr; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr;
^~~
----------
const_cast<foo *> (ptr)
{ dg-end-multiline-output "" } */
}
void test_3 (bar *ptr)
{
foo *f = (foo *)ptr; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr;
^~~
----------
reinterpret_cast<foo *> (ptr)
{ dg-end-multiline-output "" } */
}
void test_4 (bar *ptr)
{
foo *f = (foo *)ptr->field; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr->field;
^~~~~
-----------------
const_cast<foo *> (ptr->field)
{ dg-end-multiline-output "" } */
}
void test_5 ()
{
bar b_inst;
foo *f = (foo *)&b_inst; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)&b_inst;
^~~~~~
--------------
reinterpret_cast<foo *> (&b_inst)
{ dg-end-multiline-output "" } */
}
/* We don't offer suggestions for templates. */
template <typename T>
void test_6 (void *ptr)
{
foo *f = (foo *)ptr; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr;
^~~
{ dg-end-multiline-output "" } */
}
/* We don't offer suggestions where a single C++-style cast can't be
used. */
void test_7 (const void *ptr)
{
foo *f = (foo *)ptr; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)ptr;
^~~
{ dg-end-multiline-output "" } */
}
/* Likewise, no single C++-style cast is usable here. */
void test_8 (const bar &b_inst)
{
foo *f = (foo *)&b_inst; // { dg-warning "old-style cast" }
/* { dg-begin-multiline-output "" }
foo *f = (foo *)&b_inst;
^~~~~~
{ dg-end-multiline-output "" } */
}