https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78171

Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jvdelisle at gcc dot gnu.org

--- Comment #2 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Just for clarification, since checking was called for, internally gfortran
generates the following:

  array.data = 0B;
  if ((integer(kind=8)) ((real(kind=4)[0:] * restrict) array.data == 0B))
    {
      _gfortran_runtime_error_at (&"At line 4 of file pr78171.f90"[1]{lb: 1 sz:
1}, &"Allocatable actual argument \'array\' is not allocated"[1]{lb: 1 sz: 1});
    }
  foo ((real(kind=4)[0:] * restrict) array.data);

The optimizer, which comes after, knows array.dat is NULL. Therefore, no matter
what, _gfortran_runtime_error_at will always be executed. The optimizer also
knows that _gfortran_runtime_error_at does not return, it exits with a status
value of 2.

As a consequence, foo will never be called and it is optimized away.

So this is really not a bug in the compiler.

Reply via email to