From: Mikael Morin Date: Thu, 3 Nov 2011 23:58:20 +0000 (+0000) Subject: trans.h (gfc_inline_intrinsic_function_p): Move prototype... X-Git-Tag: releases/gcc-4.7.0~2533 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9645e798ba137f3edab0c560f679a433b2a460b6;p=thirdparty%2Fgcc.git trans.h (gfc_inline_intrinsic_function_p): Move prototype... * 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. From-SVN: r180904 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f8a83669c98e..a1faa78c0f20 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2011-11-03 Mikael Morin + + * 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 * trans-array.c (gfc_trans_preloop_setup): New pointers to outer diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c index c43af00c727f..fd7fa7344267 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 da3477d7a0b0..b869ca353def 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 4d745f144ceb..5757865b3a18 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. */