This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Regression on character function


Dear Damian,

On Mon, Feb 6, 2012 at 4:47 PM, Rouson, Damian <rouson@sandia.gov> wrote:
> Gfortran developers,
>
> A build from a snapshot of the development branch as of two days ago
> (installed by macports) appears to have a regression on deferred-length
> character functions. ?The text below shows a test that compiles with gcc
> 4.6.2 but not with 4.7. ?Should I file a PR?

Yes, please do.  I cannot confirm that it compiled with 4.6.2 but it
definitely does not with 4.6.3.

Interestingly, this compiles:
module foo_class
 implicit none
 type foo
 end type
contains
 function bar(this)
   class(foo) :: this
   character(:), allocatable :: bar
 end function
end module

So it is somehow connected with it being a typebound procedure.
Indeed, this fixes the problem (not regtested):
Index: gcc/fortran/resolve.c
===================================================================
*** gcc/fortran/resolve.c	(revision 183914)
--- gcc/fortran/resolve.c	(working copy)
*************** resolve_fl_derived0 (gfc_symbol *sym)
*** 11601,11607 ****
    for ( ; c != NULL; c = c->next)
      {
        /* See PRs 51550, 47545, 48654, 49050, 51075 - and 45170.  */
!       if (c->ts.type == BT_CHARACTER && c->ts.deferred)
  	{
  	  gfc_error ("Deferred-length character component '%s' at %L is not "
  		     "yet supported", c->name, &c->loc);
--- 11601,11607 ----
    for ( ; c != NULL; c = c->next)
      {
        /* See PRs 51550, 47545, 48654, 49050, 51075 - and 45170.  */
!       if (c->ts.type == BT_CHARACTER && c->ts.deferred && !c->attr.function)
  	{
  	  gfc_error ("Deferred-length character component '%s' at %L is not "
  		     "yet supported", c->name, &c->loc);


Thanks for the report.

Paul

>
> Damian
>
> $ cat character_function.F90
> module foo_class
> ?implicit none
> ?type foo
> ?contains
> ? ?procedure :: bar
> ?end type
> contains
> ?function bar(this)
> ? ?class(foo) :: this
> ? ?character(:), allocatable :: bar
> ?end function
> end module
> $ /opt/local/bin/gfortran-mp-4.6 -c character_function.F90
> $ /opt/local/bin/gfortran-mp-4.7 -c character_function.F90
> character_function.F90:9.22:
>
> ? ?class(foo) :: this
> ? ? ? ? ? ? ? ? ? ? ?1
> Error: Deferred-length character component 'bar' at (1) is not yet
> supported
> $ /opt/local/bin/gfortran-mp-4.7 --version
> GNU Fortran (GCC) 4.7.0 20120204 (experimental)
> Copyright (C) 2012 Free Software Foundation, Inc.
>
> GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
> You may redistribute copies of GNU Fortran
> under the terms of the GNU General Public License.
> For more information about these matters, see the file named COPYING
>
>
>
>



-- 
The knack of flying is learning how to throw yourself at the ground and miss.
? ? ?? --Hitchhikers Guide to the Galaxy


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]