OSDN Git Service

[flang] Fix errors in ISO_FORTRAN_ENV module for REAL128
authorpeter klausler <pklausler@nvidia.com>
Mon, 25 Jan 2021 20:25:55 +0000 (12:25 -0800)
committerpeter klausler <pklausler@nvidia.com>
Mon, 25 Jan 2021 21:41:32 +0000 (13:41 -0800)
Some parameters of 128-bit IEEE floating-point numbers were
incorrect, leading to a failure to define REAL128 to 16.

Differential Revision: https://reviews.llvm.org/D95387

flang/module/iso_fortran_env.f90

index 957c3ec..c8dc03b 100644 (file)
@@ -86,7 +86,7 @@ module iso_fortran_env
     selectedReal64 = selected_real_kind(15, 307), &   ! IEEE double
     selectedReal80 = selected_real_kind(18, 4931), &  ! 80x87 extended
     selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double"
-    selectedReal128 = selected_real_kind(33, 9863), & ! IEEE quad
+    selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad
     safeReal16 = merge(selectedReal16, selected_real_kind(0,0), &
                        selectedReal16 >= 0), &
     safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), &
@@ -115,7 +115,7 @@ module iso_fortran_env
     real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), &
                      digits(real(0,kind=safeReal64x2)) == 106), &
     real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), &
-                    digits(real(0,kind=safeReal128)) == 112)
+                    digits(real(0,kind=safeReal128)) == 113)
 
   integer, parameter :: real_kinds(*) = [ &
     [(real16, integer :: j=1, count([real16 >= 0]))], &