Viewing file: Wnonnull9.C (2.88 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR c++/98646 - spurious -Wnonnull calling a member on the result of static_cast { dg-do compile } { dg-options "-O2 -Wall" } */
struct A { virtual ~A (); }; struct B { virtual ~B (); B* bptr (); B& bref (); };
struct C: A, B { virtual ~C (); void g () const; };
void c_cast_C_ptr (B *p) { ((C*)p->bptr ())->g (); }
void c_cast_const_C_ptr (B *p) { ((const C*)p->bptr ())->g (); }
void static_cast_C_ptr (B *p) { static_cast<C*>(p->bptr ())->g (); }
void static_cast_const_C_ptr (B *p) { /* The static_cast can't fail so verify that no warning is issued here, even though GCC emits a null check for its argument. */ static_cast<const C*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
void dynamic_cast_C_ptr (B *p) { /* Unlike static_cast, dynamic cast may return null even for a nonnull operand but detecting assumptions to the contrary isn't -Wnonnull's purpose. Verify -Wnonnull isn't issued, either for the implicitly emitted null check or for other reasons (the latter may be worth warning for by some other warning). See also pr99251. */ dynamic_cast<C*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
void dynamic_cast_const_C_ptr (B *p) { dynamic_cast<const C*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
void c_cast_C_ref (B *p) { ((C&)p->bref ()).g (); }
void c_cast_const_C_ref (B *p) { ((const C&)p->bref ()).g (); }
void static_cast_C_ref (B *p) { static_cast<C&>(p->bref ()).g (); }
void static_cast_const_C_ref (B *p) { static_cast<const C&>(p->bref ()).g (); }
void dynamic_cast_C_ref (B *p) { /* The dynamic_cast fails by throwing an exception so verify that no warning is issued. */ dynamic_cast<C&>(p->bref ()).g (); }
void dynamic_cast_const_C_ref (B *p) { dynamic_cast<const C&>(p->bref ()).g (); }
struct D: B, A { virtual ~D (); void g () const; };
void c_cast_D_ptr (B *p) { ((D*)p->bptr ())->g (); }
void c_cast_const_D_ptr (B *p) { ((const D*)p->bptr ())->g (); }
void static_cast_D_ptr (B *p) { static_cast<D*>(p->bptr ())->g (); }
void static_cast_const_D_ptr (B *p) { /* The static_cast can't fail so verify that no warning is issued here, even though GCC emits a null check for its argument. */ static_cast<const D*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
void dynamic_cast_D_ptr (B *p) { /* Unlike static_cast, dynamic cast may return null even for a nonnull operand but detecting assumptions to the contrary isn't -Wnonnull's purpose. Verify -Wnonnull isn't issued, either for the implicitly emitted null check or for other reasons (the latter may be worth warning for by some other warning). See also pr99251. */ dynamic_cast<D*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
void dynamic_cast_const_D_ptr (B *p) { dynamic_cast<const D*>(p->bptr ())->g (); // { dg-bogus "\\\[-Wnonnull" } }
|