[gfortran] Partial fix for PR 19575

Steve Kargl sgk@troutmask.apl.washington.edu
Sat Jan 22 19:54:00 GMT 2005


In intrinsic.c, we were using make_alias() to add symbols
to the list of intrinsicis, but we were not probably honoring
the standard.  Consider,

  add_sym_1 ("cabs", 1, 1, BT_REAL, dr, GFC_STD_F77,
	     NULL, gfc_simplify_abs, gfc_resolve_abs,
	     a, BT_COMPLEX, dz, REQUIRED);

  add_sym_1 ("zabs", 1, 1, BT_REAL, dd, GFC_STD_GNU, 
	     NULL, gfc_simplify_abs, gfc_resolve_abs, 
	     a, BT_COMPLEX, dd, REQUIRED);

  make_alias ("cdabs");

if we set -std=f77, then cdabs would be aliased to cabs,
which is not the intended behavior.  The attached fixes
this problem.

2005-01-22  Steven G. Kargl  <kargls@comcast.net>

       * intrinsic.c (make_alias):  Add standard argument. 
       (add_functions): Update make_alias calls.

-- 
Steve
-------------- next part --------------
Index: intrinsic.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/fortran/intrinsic.c,v
retrieving revision 1.36
diff -u -b -u -r1.36 intrinsic.c
--- intrinsic.c	18 Jan 2005 12:11:51 -0000	1.36
+++ intrinsic.c	22 Jan 2005 19:45:16 -0000
@@ -808,9 +808,14 @@
    freed as a single block.  */
 
 static void
-make_alias (const char *name)
+make_alias (const char *name, int standard)
 {
 
+  /* First check that the intrinsic belongs to the selected standard.
+     If not, don't add it to the symbol list.  */
+  if (!(gfc_option.allow_std & standard))
+    return;
+
   switch (sizing)
     {
     case SZ_FUNCS:
@@ -884,7 +889,7 @@
 	     NULL, gfc_simplify_abs, gfc_resolve_abs, 
 	     a, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdabs");
+  make_alias ("cdabs", GFC_STD_GNU);
 
   make_generic ("abs", GFC_ISYM_ABS, GFC_STD_F77);
 
@@ -1127,7 +1132,7 @@
 	     NULL, gfc_simplify_cos, gfc_resolve_cos, 
 	     x, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdcos");
+  make_alias ("cdcos", GFC_STD_GNU);
 
   make_generic ("cos", GFC_ISYM_COS, GFC_STD_F77);
 
@@ -1158,7 +1163,7 @@
 	     gfc_check_dble, gfc_simplify_dble, gfc_resolve_dble,
 	     a, BT_REAL, dr, REQUIRED);
 
-  make_alias ("dfloat");
+  make_alias ("dfloat", GFC_STD_GNU);
 
   make_generic ("dble", GFC_ISYM_DBLE, GFC_STD_F77);
 
@@ -1239,7 +1244,7 @@
 	     gfc_check_etime, NULL, NULL,
 	     x, BT_REAL, 4, REQUIRED);
 
-  make_alias ("dtime");
+  make_alias ("dtime", GFC_STD_GNU);
 
   make_generic ("etime", GFC_ISYM_ETIME, GFC_STD_GNU);
 
@@ -1259,7 +1264,7 @@
 	     NULL, gfc_simplify_exp, gfc_resolve_exp, 
 	     x, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdexp");
+  make_alias ("cdexp", GFC_STD_GNU);
 
   make_generic ("exp", GFC_ISYM_EXP, GFC_STD_F77);
 
@@ -1491,7 +1496,7 @@
 	     NULL, gfc_simplify_log, gfc_resolve_log,
 	     x, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdlog");
+  make_alias ("cdlog", GFC_STD_GNU);
 
   make_generic ("log", GFC_ISYM_LOG, GFC_STD_F77);
 
@@ -1713,7 +1718,7 @@
 
   /* Compatibility with HP FORTRAN 77/iX Reference.  Note, rand() and ran()
      use slightly different shoddy multiplicative congruential PRNG.  */
-  make_alias ("ran");
+  make_alias ("ran", GFC_STD_GNU);
 
   make_generic ("rand", GFC_ISYM_RAND, GFC_STD_GNU);
 
@@ -1831,7 +1836,7 @@
 	     NULL, gfc_simplify_sin, gfc_resolve_sin,
 	     x, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdsin");
+  make_alias ("cdsin", GFC_STD_GNU);
 
   make_generic ("sin", GFC_ISYM_SIN, GFC_STD_F77);
 
@@ -1880,7 +1885,7 @@
 	     NULL, gfc_simplify_sqrt, gfc_resolve_sqrt,
 	     x, BT_COMPLEX, dd, REQUIRED);
 
-  make_alias ("cdsqrt");
+  make_alias ("cdsqrt", GFC_STD_GNU);
 
   make_generic ("sqrt", GFC_ISYM_SQRT, GFC_STD_F77);
 


More information about the Fortran mailing list