aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/check.c
diff options
context:
space:
mode:
authorDaniel Franke <dfranke@gcc.gnu.org>2007-07-22 12:31:11 -0400
committerDaniel Franke <dfranke@gcc.gnu.org>2007-07-22 12:31:11 -0400
commite1633d825dba019d03cbab83a89eb16297257604 (patch)
tree897c943e7e0ac632965a6aad7afcb4a9cdfc6087 /gcc/fortran/check.c
parent4195a76796f2a88bbbcb0947b3fc8cfb590bcf28 (diff)
downloadgcc-e1633d825dba019d03cbab83a89eb16297257604.zip
gcc-e1633d825dba019d03cbab83a89eb16297257604.tar.gz
gcc-e1633d825dba019d03cbab83a89eb16297257604.tar.bz2
re PR fortran/29962 (Initialization expressions)
gcc/fortran: 2007-07-22 Daniel Franke <franke.daniel@gmail.com> PR fortran/29962 PR fortran/31253 PR fortran/31265 PR fortran/31639 * gfortran.h (gfc_intrinsic_sym): Changed members elemental, pure, generic, specific, actual_ok, noreturn into bits of a bitfield, added bits for inquiry, transformational, conversion. * check.c (non_init_transformational): Removed, removed all callers. * intrinsic.c (enum class): New. (add_sym*): Replaced argument elemetal by enum class. Changed all callers. (add_functions): Assign appropriate classes to intrinsic functions. (add_subroutines): Assign appropriate classes to intrinsic subroutines. (add_conv): Set conversion attribute. (gfc_init_expr_extensions): Removed, removed all callers. (gfc_intrinsic_func_interface): Reimplemented check for non-standard initializatione expressions. * expr.c (check_specification_function): New. (gfc_is_constant_expr): Added check for specification functions. (check_init_expr_arguments): New. (check_inquiry): Changed return value to MATCH, added checks for inquiry functions defined by F2003. (check_transformational): New. (check_null): New. (check_elemental): New. (check_conversion): New. (check_init_expr): Call new check functions, add more specific error messages. gcc/testsuite: 2007-07-22 Daniel Franke <franke.daniel@gmail.com> PR fortran/29962 * gfortran.dg/array_initializer_1.f90: Removed warning. * gfortran.dg/initialization_1.f90: Adjusted messages. * gfortran.dg/nested_modules_6.f90: Removed warning. PR fortran/31253 * gfortran.dg/initialization_7.f90: New test. PR fortran/31639 * gfortran.dg/initialization_8.f90: New test. From-SVN: r126826
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r--gcc/fortran/check.c51
1 files changed, 0 insertions, 51 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index a196635..1b351c8 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -398,18 +398,6 @@ identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
}
-/* Error return for transformational intrinsics not allowed in
- initialization expressions. */
-
-static try
-non_init_transformational (void)
-{
- gfc_error ("transformational intrinsic '%s' at %L is not permitted "
- "in an initialization expression", gfc_current_intrinsic,
- gfc_current_intrinsic_where);
- return FAILURE;
-}
-
/***** Check functions *****/
/* Check subroutine suitable for intrinsics taking a real argument and
@@ -489,9 +477,6 @@ gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
if (dim_check (dim, 1, 1) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -809,9 +794,6 @@ gfc_check_count (gfc_expr *mask, gfc_expr *dim)
if (dim_check (dim, 1, 1) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -835,9 +817,6 @@ gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
if (dim_check (dim, 2, 1) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -937,9 +916,6 @@ gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
return FAILURE;
}
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -975,9 +951,6 @@ gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
if (dim_check (dim, 1, 1) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -1648,9 +1621,6 @@ gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
return FAILURE;
}
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -1709,9 +1679,6 @@ gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
return FAILURE;
}
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -1779,9 +1746,6 @@ gfc_check_minval_maxval (gfc_actual_arglist *ap)
|| array_check (ap->expr, 0) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return check_reduction (ap);
}
@@ -1793,9 +1757,6 @@ gfc_check_product_sum (gfc_actual_arglist *ap)
|| array_check (ap->expr, 0) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return check_reduction (ap);
}
@@ -1948,9 +1909,6 @@ gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
/* TODO: More constraints here. */
}
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -2374,9 +2332,6 @@ gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
if (scalar_check (ncopies, 2) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -2637,9 +2592,6 @@ gfc_check_transpose (gfc_expr *matrix)
if (rank_check (matrix, 0, 2) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}
@@ -2678,9 +2630,6 @@ gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
if (same_type_check (vector, 0, field, 2) == FAILURE)
return FAILURE;
- if (gfc_init_expr)
- return non_init_transformational ();
-
return SUCCESS;
}