2007-12-16 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Dec 2007 22:12:55 +0000 (22:12 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Dec 2007 22:12:55 +0000 (22:12 +0000)
        PR fortran/34495
        * intrinsic.c (add_functions): Mark float and sngl as STD_GNU.
        (gfc_intrinsic_func_interface): Reject REAL, DBLE and CMPLX
        in initialization expressions for -std=f95.

2007-12-16  Tobias Burnus  <burnus@net-b.de>

        PR fortran/34495
        * gfortran.dg/initialization_16.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130994 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/initialization_16.f90 [new file with mode: 0644]

index cf54102..5f6e1dc 100644 (file)
@@ -1,3 +1,10 @@
+2007-12-16  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34495
+       * intrinsic.c (add_functions): Mark float and sngl as STD_GNU.
+       (gfc_intrinsic_func_interface): Reject REAL, DBLE and CMPLX
+       in initialization expressions for -std=f95.
+
 2007-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/34305
index 467f771..aaaa620 100644 (file)
@@ -2047,11 +2047,11 @@ add_functions (void)
             gfc_check_fn_c, gfc_simplify_realpart, gfc_resolve_realpart,
             a, BT_UNKNOWN, dr, REQUIRED);
 
-  add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
+  add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
             gfc_check_i, gfc_simplify_float, NULL,
             a, BT_INTEGER, di, REQUIRED);
 
-  add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77,
+  add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU,
             NULL, gfc_simplify_sngl, NULL,
             a, BT_REAL, dd, REQUIRED);
 
@@ -3388,6 +3388,14 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag)
   if (check_intrinsic_standard (name, isym->standard, &expr->where) == FAILURE)
     return MATCH_ERROR;
 
+  if ((isym->id == GFC_ISYM_REAL || isym->id == GFC_ISYM_DBLE
+       || isym->id == GFC_ISYM_CMPLX)
+      && gfc_init_expr
+      && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Function '%s' "
+                        "as initialization expression at %L", name,
+                        &expr->where) == FAILURE)
+    return MATCH_ERROR;
+
   gfc_current_intrinsic_where = &expr->where;
 
   /* Bypass the generic list for min and max.  */
index 82411bd..0c14c4e 100644 (file)
@@ -1,3 +1,8 @@
+2007-12-16  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34495
+       * gfortran.dg/initialization_16.f90: New.
+
 2007-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/34305
diff --git a/gcc/testsuite/gfortran.dg/initialization_16.f90 b/gcc/testsuite/gfortran.dg/initialization_16.f90
new file mode 100644 (file)
index 0000000..185099a
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-std=f95 -Wall" }
+!
+! PR fortran/34495
+!
+! Check for invalid Fortran 95 initialization expressions
+!
+program main
+  implicit none
+  real, parameter :: r1 = real(33)    ! { dg-error "Fortran 2003: Function 'real' as initialization expression" } 
+  real, parameter :: r2 = dble(33)    ! { dg-error "Fortran 2003: Function 'dble' as initialization expression" }
+  real, parameter :: r4 = cmplx(33,33)! { dg-error "Fortran 2003: Function 'cmplx' as initialization expression" }
+  print *, sngl(1.0d0) ! { dg-error "not included in the selected standard" }
+  print *, float(1.0)  ! { dg-error "not included in the selected standard" }
+end program main