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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2013-10-05 00:00:00         |2017-8-3
                 CC|                            |tkoenig at gcc dot gnu.org

--- Comment #4 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
The tree dump of a slightly modified test case (just to make things
look more tidy) seems OK at first glance, but there is one strange
thing:

program main
  character(1) :: s(1)
  s = "a"
  call printit(s(1)(1:1) )
  associate (x=>s(1)(1:1))
    call printit(x)
  end associate
contains
  subroutine printit(y)
    character(len=*) :: y
    print *,y
  end subroutine printit
end program main

This gives:

MAIN__ ()
{
  static void printit (character(kind=1)[1:] & restrict, integer(kind=4));
  character(kind=1) s[1][1:1];

  {
    character(kind=1)[1:1] * x;
                           ^^^^^
    {
      integer(kind=8) S.1;

      S.1 = 1;
      while (1)
        {
          if (S.1 > 1) goto L.1;
          s[S.1 + -1][1]{lb: 1 sz: 1} = 97;
          S.1 = S.1 + 1;
        }
      L.1:;
    }
    printit (&s[0], 1);
    x = (character(kind=1)[1:1] *) &&s[0];
                                  ^^^^^^^^
    printit (x, 1);
    L.2:;
  }
}

Seems like the type of x is wrong here.

Reply via email to