Work harder to avoid -Wuninitialized for objects of empty structs (PR middle-end/96295).
Resolves: PR middle-end/96295 - -Wmaybe-uninitialized warning for range operator with reference to an empty struct gcc/ChangeLog: PR middle-end/96295 * tree-ssa-uninit.c (maybe_warn_operand): Work harder to avoid warning for objects of empty structs gcc/testsuite/ChangeLog: PR middle-end/96295 * g++.dg/warn/Wuninitialized-11.C: New test.
This commit is contained in:
parent
8155316c6f
commit
8b75204b27
2 changed files with 28 additions and 0 deletions
26
gcc/testsuite/g++.dg/warn/Wuninitialized-11.C
Normal file
26
gcc/testsuite/g++.dg/warn/Wuninitialized-11.C
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* PR middle-end/96295 - -Wmaybe-uninitialized warning for range operator
|
||||
with reference to an empty struct
|
||||
{ dg-do compile }
|
||||
{ dg-options "-Wall" }
|
||||
{ dg-require-effective-target c++11 } */
|
||||
|
||||
struct I
|
||||
{
|
||||
bool operator!= (const I&) const;
|
||||
void* operator* () const;
|
||||
I& operator++ ();
|
||||
};
|
||||
|
||||
struct A
|
||||
{
|
||||
I begin () const { return I (); }
|
||||
I end () const { return I (); }
|
||||
};
|
||||
|
||||
void f (void)
|
||||
{
|
||||
for (void *p : A ()) // { dg-bogus "\\\[-Wmaybe-uninitialized" }
|
||||
{
|
||||
(void)p;
|
||||
}
|
||||
}
|
|
@ -401,6 +401,8 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs,
|
|||
The first_field() test is important for C++ where the predicate
|
||||
alone isn't always sufficient. */
|
||||
tree rhstype = TREE_TYPE (rhs);
|
||||
if (POINTER_TYPE_P (rhstype))
|
||||
rhstype = TREE_TYPE (rhstype);
|
||||
if (TYPE_EMPTY_P (rhstype)
|
||||
|| (RECORD_OR_UNION_TYPE_P (rhstype)
|
||||
&& (!first_field (rhstype)
|
||||
|
|
Loading…
Add table
Reference in a new issue