------- Comment #7 from fxcoudert at gcc dot gnu dot org  2007-08-14 14:10 
-------
Reduced testcase:

subroutine print_sub(l, labels)
  logical :: l
  character (len=*), optional :: labels(1)
  if (l) call foo
  if (present(labels)) then
    print *, labels(1)
  end if
end

The logical and corresponding if clause are only here to prevent the optimizer
being too clever, but any non-trivially-dead code works as well. The tree dump
for this is along the lines of:

print_sub (l, labels, _labels)
{
  char[1][1:_labels] * labels.0;

  if (labels != 0B)
    labels.0 = (char[1][1:_labels] *) labels;

  if (*l)
    foo()

  if (labels != 0B)
    {
      _gfortran_transfer_character (&dt_parm.0, &(*labels.0)[0][1]{lb: 1 sz:
1}, _labels);
      _gfortran_st_write_done (&dt_parm.0);
    }
}


I suspect that '<anonymous>' is labels.0 (though it *has* a name!), because
it's set in the first if-block and used in the second. If the optimizer is
intelligent enough to remove the code in-between, the warning disappears.


-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |fxcoudert at gcc dot gnu dot
                   |dot org                     |org
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2007-01-31 23:15:40         |2007-08-14 14:10:15
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29459

Reply via email to