diff options
author | Daniel Franke <dfranke@gcc.gnu.org> | 2007-07-22 12:31:11 -0400 |
---|---|---|
committer | Daniel Franke <dfranke@gcc.gnu.org> | 2007-07-22 12:31:11 -0400 |
commit | e1633d825dba019d03cbab83a89eb16297257604 (patch) | |
tree | 897c943e7e0ac632965a6aad7afcb4a9cdfc6087 /gcc/fortran/check.c | |
parent | 4195a76796f2a88bbbcb0947b3fc8cfb590bcf28 (diff) | |
download | gcc-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.c | 51 |
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; } |