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]

[Patch, Fortran] PR50619 - fix ASSOCIATE with -finit-*


First, I would like to ping my move_alloc coarray patches. The handling is in line with the J3-approved interpretation request F08/0040 with some remarks of the WG5 convenor (John Reid), cf. PR for the links:
- http://gcc.gnu.org/ml/fortran/2012-05/msg00171.html
- http://gcc.gnu.org/ml/fortran/2012-05/msg00173.html


* * *

ASSOCIATE names are (wrongly) initialized by -finit-real=*, thus, their values are wrong.

The fix seems to be rather obvious, but I am not really an associate expert.

Build and regtested on x86-64-linux.
OK for the trunk? How about backporting? It's not a regression and it requires a nondefault flag; on the other hand, it can be rather suprising wrong-code bug and the fix is simple.


Tobias
2012-06-04  Tobias Burnus  <burnus@net-b.de>

	PR fortran/50619
	* resolve.c (build_default_init_expr): Don't initialize
	ASSOCIATE names.

2012-06-04  Tobias Burnus  <burnus@net-b.de>

	PR fortran/50619
	* gfortran.dg/init_flag_10.f90: New.

diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 3627b71..61a1381 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -10103,7 +10103,8 @@ build_default_init_expr (gfc_symbol *sym)
       || sym->attr.data
       || sym->module
       || sym->attr.cray_pointee
-      || sym->attr.cray_pointer)
+      || sym->attr.cray_pointer
+      || sym->assoc)
     return NULL;
 
   /* Now we'll try to build an initializer expression.  */
--- /dev/null	2012-06-04 08:06:14.603785028 +0200
+++ gcc/gcc/testsuite/gfortran.dg/init_flag_10.f90	2012-06-04 14:42:30.000000000 +0200
@@ -0,0 +1,43 @@
+! { dg-do run }
+! { dg-options "-finit-real=NAN" }
+! { dg-add-options ieee }
+! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } }
+!
+! PR fortran/50619
+!
+! Contributed by Fred Krogh
+!
+! The NaN initialization used to set the associate name to NaN!
+!
+
+module testa2
+type, public ::  test_ty
+  real :: rmult = 1.0e0
+end type test_ty
+
+contains
+  subroutine test(e, var1)
+    type(test_ty) :: e
+    real :: var1, var2 ! Should get NaN initialized
+
+    ! Should be the default value
+    if (e%rmult /= 1.0) call abort ()
+
+    ! Check that NaN initialization is really turned on
+    if (var1 == var1) call abort () 
+    if (var2 == var2) call abort () 
+
+    ! The following was failing:
+    associate (rmult=>e%rmult)
+      if (e%rmult /= 1.0) call abort ()
+    end associate
+  end subroutine test
+end module testa2
+
+program testa1
+  use testa2
+  type(test_ty) :: e
+  real :: var1 ! Should get NaN initialized
+  call test(e, var1)
+  stop
+end program testa1

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