2011-02-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 19 Feb 2011 15:31:15 +0000 (15:31 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 19 Feb 2011 15:31:15 +0000 (15:31 +0000)
    Tobias Burnus  <burnus@net-b.de>

* lib/target-supports.exp
(check_effective_target_fortran_large_real): New check for large reals.
* gfortran.dg/nan_7.f90: New test.

Co-Authored-By: Tobias Burnus <burnus@net-b.de>
From-SVN: r170320

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/nan_7.f90 [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp

index fd5066b204e3ea4c8bfbcc0de8a9cf90c861f6b0..ccdea7f342f5e595c860dc146fbd96158cc6e95f 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+           Tobias Burnus  <burnus@net-b.de>
+
+       * lib/target-supports.exp
+       (check_effective_target_fortran_large_real): New check for large reals.
+       * gfortran.dg/nan_7.f90: New test.
+
 2011-02-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/47567
diff --git a/gcc/testsuite/gfortran.dg/nan_7.f90 b/gcc/testsuite/gfortran.dg/nan_7.f90
new file mode 100644 (file)
index 0000000..12c7b3c
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do run }
+! { dg-options "-fno-range-check" }
+! { dg-require-effective-target fortran_real_16 }
+! { dg-require-effective-target fortran_integer_16 }
+! PR47293 NAN not correctly read
+character(len=200) :: str
+real(16) :: r
+integer(16) :: k2
+integer(16), parameter :: quietnan = 170099645085600953110659059745250344960
+r = 1.0
+str = 'NAN' ; read(str,*) r
+k2 = transfer(r,k2)
+k2 = iand(k2, z'fff80000000000000000000000000000')
+if (k2.ne.quietnan) call abort
+end
index 02cb7acd9ee0c3294054aa909406ee9cda57eba6..36cab543bdceeabafa425114d77dbdc7255129c8 100644 (file)
@@ -956,6 +956,22 @@ proc check_effective_target_fortran_large_real { } {
     }]
 }
 
+# Return 1 if the target supports Fortran real kind real(16),
+# 0 otherwise. Contrary to check_effective_target_fortran_large_real
+# this checks for Real(16) only; the other returned real(10) if
+# both real(10) and real(16) are available.
+#
+# When the target name changes, replace the cached result.
+
+proc check_effective_target_fortran_real_16 { } {
+    return [check_no_compiler_messages fortran_real_16 executable {
+       ! Fortran
+       real(kind=16) :: x
+       x = cos (x)
+       end
+    }]
+}
+
 # Return 1 if the target supports Fortran integer kinds larger than
 # integer(8), 0 otherwise.
 #