[Bug middle-end/56748] Bogus uninitialized warning with nested if condition
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Mar 27 08:26:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56748
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
CC| |burnus at gcc dot gnu.org
Component|fortran |middle-end
Summary|STOP statement + array |Bogus uninitialized warning
|optional variable causes |with nested if condition
|bogus uninitialized warning |
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-03-27 08:26:31 UTC ---
First remark: Bogus uninitialized warnings can not always be prevented. - It is
a extremely complex problem, where a few false warnings (and many missed
warnings) are unavoidable. Still, one should do better.
If one looks at the dump (-fdump-tree-original, i.e. a C-like output of the
internal representation), one sees:
mysub (struct array1_integer(kind=4) & restrict a,
struct array1_integer(kind=4) * b)
{
...
if (b != 0B && (integer(kind=4)[0:] * restrict) b->data != 0B)
b.0 = (integer(kind=4)[0:D.1925] * restrict) b->data;
...
if (b != 0B && (integer(kind=4)[0:] * restrict) b->data != 0B)
...
if (b != 0B && (integer(kind=4)[0:] * restrict) b->data != 0B)
{
// Here are some run-time checks, enabled by -fcheck=all
}
...
parm.10.data = (void *) &(*b.0)[0];
_gfortran_transfer_array_write (&dt_parm.9, &parm.10, 4, 0);
As all "if" conditions are the same, b.0 is never uninitialized. However,
nesting the same "b != NULL" seems to confuse the uninitialized diagnostic.
More information about the Gcc-bugs
mailing list