diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/dependency.c | 11 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 3 | ||||
-rw-r--r-- | gcc/fortran/trans.h | 3 |
4 files changed, 21 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f8a8366..a1faa78 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,12 @@ 2011-11-03 Mikael Morin <mikael@gcc.gnu.org> + * trans.h (gfc_inline_intrinsic_function_p): Move prototype... + * gfortran.h (gfc_inline_intrinsic_function_p): ... here. + * dependency.c (gfc_check_argument_var_dependency): Check dependencies + of inline intrinsics' arguments. + +2011-11-03 Mikael Morin <mikael@gcc.gnu.org> + * trans-array.c (gfc_trans_preloop_setup): New pointers to outer dimension's ss and loop. Use them. diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c index c43af00..fd7fa73 100644 --- a/gcc/fortran/dependency.c +++ b/gcc/fortran/dependency.c @@ -713,6 +713,17 @@ gfc_check_argument_var_dependency (gfc_expr *var, sym_intent intent, return gfc_check_fncall_dependency (var, intent, NULL, expr->value.function.actual, ELEM_CHECK_VARIABLE); + + if (gfc_inline_intrinsic_function_p (expr)) + { + /* The TRANSPOSE case should have been caught in the + noncopying intrinsic case above. */ + gcc_assert (expr->value.function.isym->id != GFC_ISYM_TRANSPOSE); + + return gfc_check_fncall_dependency (var, intent, NULL, + expr->value.function.actual, + ELEM_CHECK_VARIABLE); + } } return 0; diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index da3477d..b869ca3 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2880,6 +2880,9 @@ void gfc_generate_code (gfc_namespace *); void gfc_generate_module_code (gfc_namespace *); void gfc_init_coarray_decl (bool); +/* trans-intrinsic.c */ +bool gfc_inline_intrinsic_function_p (gfc_expr *); + /* bbt.c */ typedef int (*compare_fn) (void *, void *); void gfc_insert_bbt (void *, void *, compare_fn); diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 4d745f1..5757865 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -396,9 +396,6 @@ tree gfc_builtin_decl_for_float_kind (enum built_in_function, int); tree gfc_conv_intrinsic_subroutine (gfc_code *); void gfc_conv_intrinsic_function (gfc_se *, gfc_expr *); -/* Is the intrinsic expanded inline. */ -bool gfc_inline_intrinsic_function_p (gfc_expr *); - /* Does an intrinsic map directly to an external library call This is true for array-returning intrinsics, unless gfc_inline_intrinsic_function_p returns true. */ |