https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99061

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org
   Last reconfirmed|                            |2021-02-10
           Priority|P3                          |P4
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from kargl at gcc dot gnu.org ---
Patch tested with 

program p
   real(4)  :: z4, a4 = 1.0_4
   real(8)  :: z8, a8 = 1.0_8
   real(10) :: z0, a0 = 1.0_10
   real(16) :: z6, a6 = 1.0_16
   z4 = atan2d(a4, a4)
   z8 = atan2d(a8, a8)
   z0 = atan2d(a0, a0)
   z6 = atan2d(a6, a6)
   print *, z4
   print *, z8
   print *, z0
   print *, z6
end

Patch has not been regression tested.

diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 5c9258c65c3..0cf0aa56811 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -4717,6 +4717,7 @@ gfc_conv_intrinsic_cotand (gfc_se *se, gfc_expr *expr)
 static void
 gfc_conv_intrinsic_atan2d (gfc_se *se, gfc_expr *expr)
 {
+  gfc_intrinsic_map_t *m;
   tree args[2];
   tree atan2d;
   tree type;
@@ -4724,7 +4725,13 @@ gfc_conv_intrinsic_atan2d (gfc_se *se, gfc_expr *expr)
   gfc_conv_intrinsic_function_args (se, expr, args, 2);
   type = TREE_TYPE (args[0]);

-  atan2d = gfc_builtin_decl_for_float_kind (BUILT_IN_ATAN2, expr->ts.kind);
+  /* Find tan builtin function.  */
+  m = gfc_intrinsic_map;
+  for (; m->id != GFC_ISYM_NONE || m->double_built_in != END_BUILTINS; m++)
+    if (GFC_ISYM_ATAN2 == m->id)
+      break;
+
+  atan2d = gfc_get_intrinsic_lib_fndecl (m, expr);
   atan2d = build_call_expr_loc (input_location, atan2d, 2, args[0], args[1]);

   se->expr = fold_build2_loc (input_location, MULT_EXPR, type, atan2d,

Reply via email to