Viewing file: Wdangling-pointer.C (1.24 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Exercise basic C++-only cases of -Wdangling-pointer. { dg-do compile } { dg-options "-Wall -Wno-class-memaccess" } */
extern "C" void* memset (void*, int, __SIZE_TYPE__);
void sink (const void*, ...);
struct S { S (); };
void nowarn_int_ref (int i) { const S &sref = S (); const int &iref = 1 + i; sink (&sref, &iref); }
void warn_init_ref_member () { struct AS { const S &sref; AS (): // The temporary S object is destroyed when AS::AS() returns. sref (S ()) // { dg-warning "storing the address" } { } } as;
struct Ai { const int &iref; Ai (): // The temporary int is destroyed when Ai::Ai() returns. iref (1 + 1) // { dg-warning "storing the address" } { } } ai;
sink (&as, &ai); }
void default_ref_arg (const S& = S ());
void nowarn_call_default_ref_arg () { default_ref_arg (); }
void nowarn_array_access () { /* Verify that the clobber in the exceptional basic block doesn't cause bogus warnings. */ S a[1]; memset (a, 0, sizeof a); sink (a); }
void nowarn_array_access_cond (int i) { if (i) { S a1[1]; memset (a1, 0, sizeof a1); sink (a1); } else { S a2[2]; memset (a2, 0, sizeof a2); sink (a2); } }
|