// { 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 (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 (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 (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 (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 (&b_inst) { dg-end-multiline-output "" } */ } /* We don't offer suggestions for templates. */ template 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 "" } */ }