On Tue, Sep 09, 2025 at 09:32:41PM +0200, Harald Anlauf wrote:
> Running the related tests under valgrind did not reveal anything.
> The maybe-uninitialized errors are bogus.

They aren't, because the compiler doesn't know that those 17 or how many
calls in between
  switch (code->resolved_isym->id)
and
  if (code->resolved_isym->id == GFC_ISYM_FSTAT)
later on don't change code->resolved_isym or code->resolved_isym->id
(which is passed to the function, so escaped, any function compiler doesn't
know anything about could have access to that through global variables in
theory).

I think if the code did
  auto id = code->resolved_isym->id;
  switch (id)
    {
    case GFC_ISYM_FSTAT:
      ...
      break;
    case GFC_ISYM_LSTAT:
    case GFC_ISYM_STAT:
      ...
      break;
    default:
      gcc_unreachable ();
    }
...
  switch (id)
...
  if (id == GFC_ISYM_FSTAT)
    tmp = build_call_expr_loc (input_location, tmp, 3, unit, vals,
                               stat ? arg3 : null_pointer_node);
  else
    tmp = build_call_expr_loc (input_location, tmp, 4, name, vals,
                               stat ? arg3 : null_pointer_node, slen);
then it wouldn't have the uninit warnings.

        Jakub

Reply via email to