Bug 54147 - [F03] Interface checks for PPCs & deferred TBPs
Summary: [F03] Interface checks for PPCs & deferred TBPs
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.8.0
: P3 normal
Target Milestone: ---
Assignee: janus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-31 19:15 UTC by janus
Modified: 2012-08-02 09:00 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-08-01 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description janus 2012-07-31 19:15:37 UTC
After fixing PR 42418, I realized that the constraints in F08:C1216 apply also to
1) procedure-pointer components and
2) type-bound procedures,
where they are currently not enforced.


Test case for PPCs:


  interface gen
    procedure gen
  end interface

  type t1
    procedure(gen),pointer,nopass  :: p1
    procedure(gen2),pointer,nopass :: p2  ! { dg-error "may not be generic" }
  end type

  type t2
    procedure(sf),pointer,nopass   :: p3  ! { dg-error "may not be a statement function" }
  end type

  type t3
    procedure(char),pointer,nopass :: p4  ! { dg-error "Intrinsic procedure" }
  end type

  interface gen2
    procedure gen
  end interface

  sf(x) = x**2

contains

  subroutine gen
  end subroutine

end
Comment 1 janus 2012-07-31 20:36:41 UTC
Equivalent test case for TBPs:


  interface gen
    procedure gen
  end interface

  type, abstract :: t1
  contains
    procedure(gen),deferred,nopass  :: p1
    procedure(gen2),deferred,nopass :: p2
  end type

  type, abstract :: t2
  contains
    procedure(sf),deferred,nopass   :: p3
  end type

  type, abstract :: t3
  contains
    procedure(char),deferred,nopass :: p4
  end type

  interface gen2
    procedure gen
  end interface

  sf(x) = x**2

contains

  subroutine gen
  end subroutine

end
Comment 2 janus 2012-07-31 20:43:16 UTC
For TBPs there seems to be a similar but non-equivalent check in resolve_typebound_procedure. It is supposed to check for F08:C465, but apparently is also applied to the interface of deferred procedures (which it should not be), and therefore probably rejects too much (all four cases in comment 1 are rejected).
Comment 3 janus 2012-08-01 09:34:15 UTC
(In reply to comment #0)
> After fixing PR 42418, I realized that the constraints in F08:C1216 apply also
> to
> 1) procedure-pointer components and
> 2) type-bound procedures,

to be precise, they only apply to *deferred* TBPs, since 'regular' ones do not have an interface specification.

I'm working on a patch ...
Comment 4 janus 2012-08-02 08:58:01 UTC
Author: janus
Date: Thu Aug  2 08:57:58 2012
New Revision: 190069

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190069
Log:
2012-08-02  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/54147
	* resolve.c (check_proc_interface): New routine for PROCEDURE interface
	checks.
	(resolve_procedure_interface,resolve_typebound_procedure,
	resolve_fl_derived0): Call it.

2012-08-02  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/54147
	* gfortran.dg/abstract_type_6.f03: Modified.
	* gfortran.dg/proc_ptr_comp_3.f90: Modified.
	* gfortran.dg/proc_ptr_comp_35.f90: New.
	* gfortran.dg/typebound_proc_9.f03: Modified.
	* gfortran.dg/typebound_proc_26.f90: New.

Added:
    trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_35.f90
    trunk/gcc/testsuite/gfortran.dg/typebound_proc_26.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/abstract_type_6.f03
    trunk/gcc/testsuite/gfortran.dg/proc_ptr_comp_3.f90
    trunk/gcc/testsuite/gfortran.dg/typebound_proc_9.f03
Comment 5 janus 2012-08-02 09:00:51 UTC
Fixed with r190069. Closing.