Patchwork [Fortran] PR53111 - fix -std=f95 diagnostic regression (constructor patch)

login
register
mail settings
Submitter Tobias Burnus
Date May 3, 2012, 9:45 a.m.
Message ID <4FA2539D.8030108@net-b.de>
Download mbox | patch
Permalink /patch/156648/
State New
Headers show

Comments

Tobias Burnus - May 3, 2012, 9:45 a.m.
Dear all,

attached you find a patch for a -std=f95 diagnostic issue related to 
F2003 constructors, which is a 4.7/4.8 rejects-valid regression.

It was build and regtested on x86-64-linux.
OK for 4.7 and the trunk?

Note that a valid-F95 special case is still rejected with -std=f95 (cf. 
attached test case), but I believe that the current patch is sufficient.


Secondly, I try to get again an overview about pending patches. I found:

a) Pending review

- Janne's Fix handling of temporary files
http://gcc.gnu.org/ml/fortran/2012-05/msg00006.html
- Janne's PR 49010/24518 MOD/MODULO fixes, take 2
http://gcc.gnu.org/ml/fortran/2012-05/msg00007.html
- Janne's PR 52428 Reading of large negative values and range checking
http://gcc.gnu.org/ml/fortran/2012-05/msg00008.html
- Thomas' string comparison patch
http://gcc.gnu.org/ml/fortran/2012-04/msg00068.html
- This patch ;-)

b) Pending committal:

- Paul's SELECT TYPE patch
http://gcc.gnu.org/ml/fortran/2012-05/msg00000.html
- Bernhard's cleanup-module patch
http://gcc.gnu.org/ml/fortran/2012-04/msg00105.html

c) More controversial patches:

- FX's backtrace patch
http://gcc.gnu.org/ml/fortran/2012-04/msg00131.html
- Janus' proc-pointer patch (ABI breakage)

http://gcc.gnu.org/ml/fortran/2012-04/msg00033.html


d) RFA patch

- My C_F_pointer patch
http://gcc.gnu.org/ml/fortran/2012-04/msg00115.html

I hope that I found all pending patches.


Thirdly, we are accumulating regressions. The current count is 12. There 
are also a couple of other bugs, e.g. related to namelist reads, which 
should be get some attention.

Tobias
Paul Richard Thomas - May 4, 2012, 12:01 p.m.
Dear Tobias,

The patch is OK for 4.7 and trunk - thanks.

The commit of the PR41600 is delayed until tomorrow or Sunday because
of PR53191.  I have regtested a fix for it and, since it is 'obvious'
I will commit it with the main patch.  In fact, it extends the
constraint C614 (see resolve_ref) to include class expressions and
removes the ad hoc error in the PR41600 patch.

Cheers

Paul

On 3 May 2012 11:45, Tobias Burnus <burnus@net-b.de> wrote:
> Dear all,
>
> attached you find a patch for a -std=f95 diagnostic issue related to F2003
> constructors, which is a 4.7/4.8 rejects-valid regression.
>
> It was build and regtested on x86-64-linux.
> OK for 4.7 and the trunk?
>
> Note that a valid-F95 special case is still rejected with -std=f95 (cf.
> attached test case), but I believe that the current patch is sufficient.
>
>
> Secondly, I try to get again an overview about pending patches. I found:
>
> a) Pending review
>
> - Janne's Fix handling of temporary files
> http://gcc.gnu.org/ml/fortran/2012-05/msg00006.html
> - Janne's PR 49010/24518 MOD/MODULO fixes, take 2
> http://gcc.gnu.org/ml/fortran/2012-05/msg00007.html
> - Janne's PR 52428 Reading of large negative values and range checking
> http://gcc.gnu.org/ml/fortran/2012-05/msg00008.html
> - Thomas' string comparison patch
> http://gcc.gnu.org/ml/fortran/2012-04/msg00068.html
> - This patch ;-)
>
> b) Pending committal:
>
> - Paul's SELECT TYPE patch
> http://gcc.gnu.org/ml/fortran/2012-05/msg00000.html
> - Bernhard's cleanup-module patch
> http://gcc.gnu.org/ml/fortran/2012-04/msg00105.html
>
> c) More controversial patches:
>
> - FX's backtrace patch
> http://gcc.gnu.org/ml/fortran/2012-04/msg00131.html
> - Janus' proc-pointer patch (ABI breakage)
>
> http://gcc.gnu.org/ml/fortran/2012-04/msg00033.html
>
>
> d) RFA patch
>
> - My C_F_pointer patch
> http://gcc.gnu.org/ml/fortran/2012-04/msg00115.html
>
> I hope that I found all pending patches.
>
>
> Thirdly, we are accumulating regressions. The current count is 12. There are
> also a couple of other bugs, e.g. related to namelist reads, which should be
> get some attention.
>
> Tobias

Patch

2012-05-03  Tobias Burnus  <burnus@net-b.de>

	PR fortran/53111
	* resolve.c (resolve_fl_derived): Fix -std=f95
	diagnostic for generic vs. DT names.

2012-05-03  Tobias Burnus  <burnus@net-b.de>

	PR fortran/53111
	* gfortran.dg/constructor_7.f90: New.
	* gfortran.dg/constructor_8.f90: New.

diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 57da577..411ebb5 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12015,6 +12015,8 @@  resolve_fl_derived (gfc_symbol *sym)
   if (!sym->attr.is_class)
     gfc_find_symbol (sym->name, sym->ns, 0, &gen_dt);
   if (gen_dt && gen_dt->generic && gen_dt->generic->next
+      && (!gen_dt->generic->sym->attr.use_assoc
+	  || gen_dt->generic->sym->module != gen_dt->generic->next->sym->module)
       && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Generic name '%s' of "
 			 "function '%s' at %L being the same name as derived "
 			 "type at %L", sym->name,
--- /dev/null	2012-04-23 08:17:57.683771451 +0200
+++ gcc/gcc/testsuite/gfortran.dg/constructor_7.f90	2012-05-03 11:03:40.000000000 +0200
@@ -0,0 +1,48 @@ 
+! { dg-do compile }
+! { dg-options "-std=f95" }
+!
+! PR fortran/53111
+!
+
+! ------------ INVALID ONE ------------------------
+
+module m
+type t
+  integer :: i
+end type t
+end
+
+module m2
+ interface t
+   module procedure sub
+ end interface t
+contains
+ integer function sub()
+   sub = 4
+ end function sub
+end module m2
+
+! Note: The following is formally valid as long as "t" is not used.
+! For simplicity, -std=f95 will give an error.
+! It is unlikely that a real-world program is rejected with -std=f95
+! because of that.
+
+use m   ! { dg-error "Fortran 2003: Generic name 't' of function 'sub' at .1. being the same name as derived type at" }
+use m2  ! { dg-error "Fortran 2003: Generic name 't' of function 'sub' at .1. being the same name as derived type at" }
+! i = sub()  ! << Truly invalid in F95, valid in F2003
+end
+
+! ------------ INVALID TWO ------------------------
+
+module m3
+type t2  ! { dg-error "Fortran 2003: Generic name 't2' of function 'sub2' at .1. being the same name as derived type at" }
+  integer :: i
+end type t2
+ interface t2
+   module procedure sub2
+ end interface t2
+contains
+ integer function sub2()  ! { dg-error "Fortran 2003: Generic name 't2' of function 'sub2' at .1. being the same name as derived type at" }
+   sub2 = 4
+ end function sub2
+end module m3
--- /dev/null	2012-04-23 08:17:57.683771451 +0200
+++ gcc/gcc/testsuite/gfortran.dg/constructor_8.f90	2012-05-03 11:01:06.000000000 +0200
@@ -0,0 +1,22 @@ 
+! { dg-do compile }
+! { dg-options "-std=f95" }
+!
+! PR fortran/53111
+!
+! Contributed by Jacob Middag, reduced by Janus Weil.
+!
+
+module a
+  type :: my
+    real :: x
+  end type
+end module
+
+module b
+  use a
+end module
+
+program test
+  use a
+  use b
+end program