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
2012-05-03 Tobias Burnus <bur...@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 <bur...@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