diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-28 14:03:29 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-28 14:03:29 +0000 |
commit | f50671fe14ad06fc6793753f05c03600c2fb9903 (patch) | |
tree | 48f977d57ea2f4163dd60d917bfd1230174a7219 /gcc/fortran | |
parent | 506cd07ff0a6af7ed5de17de608e7d4ca48480c8 (diff) | |
download | gcc-f50671fe14ad06fc6793753f05c03600c2fb9903.tar.gz |
2011-11-28 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 181775 using svnmerge
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@181777 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 33 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-stmt.c | 3 | ||||
-rw-r--r-- | gcc/fortran/trans-types.c | 3 |
6 files changed, 53 insertions, 8 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 83974b51ca0..4ee062c23e7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,36 @@ +2011-11-25 Mikael Morin <mikael@gcc.gnu.org> + + * trans-array.c (set_loop_bounds): Remove dead conditions. + +2011-11-25 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/51250 + PR fortran/43829 + * trans-array.c (gfc_trans_create_temp_array): Get dimension from + the right gfc_ss struct. + +2011-11-25 Tobias Burnus <burnus@net-b.de> + + PR fortran/50408 + * trans-decl.c (gfc_get_module_backend_decl): Also copy + ts.u.derived from the gsym if the ts.type is BT_CLASS. + (gfc_get_extern_function_decl): Copy also the backend_decl + for the symbol's ts.u.{derived,cl} from the gsym. + * trans-types.c (gfc_copy_dt_decls_ifequal): Directly + return if "from" and "to" are the same. + +2011-11-25 Tobias Burnus <burnus@net-b.de> + + PR fortran/51302 + * trans-stmt.c (gfc_trans_simple_do): Add a fold_convert. + +2011-11-24 Tobias Burnus <burnus@net-b.de> + + PR fortran/51218 + * resolve.c (pure_subroutine): If called subroutine is + impure, unset implicit_pure. + (resolve_function): Move impure check to simplify code. + 2011-11-19 Tobias Burnus <burnus@net-b.de> PR fortran/51207 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 94c21bedf8d..6baeff44fa7 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3191,10 +3191,10 @@ resolve_function (gfc_expr *expr) "procedure within a PURE procedure", name, &expr->where); t = FAILURE; } - } - if (!pure_function (expr, &name) && name && gfc_implicit_pure (NULL)) - gfc_current_ns->proc_name->attr.implicit_pure = 0; + if (gfc_implicit_pure (NULL)) + gfc_current_ns->proc_name->attr.implicit_pure = 0; + } /* Functions without the RECURSIVE attribution are not allowed to * call themselves. */ @@ -3257,6 +3257,9 @@ pure_subroutine (gfc_code *c, gfc_symbol *sym) else if (gfc_pure (NULL)) gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name, &c->loc); + + if (gfc_implicit_pure (NULL)) + gfc_current_ns->proc_name->attr.implicit_pure = 0; } diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 2fb2d34ae4a..ee8f89693b4 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -1087,7 +1087,7 @@ gfc_trans_create_temp_array (stmtblock_t * pre, stmtblock_t * post, gfc_ss * ss, for (s = ss; s; s = s->parent) for (n = 0; n < s->loop->dimen; n++) { - dim = get_scalarizer_dim_for_array_dim (ss, ss->dim[n]); + dim = get_scalarizer_dim_for_array_dim (ss, s->dim[n]); /* For a callee allocated array express the loop bounds in terms of the descriptor fields. */ @@ -4341,9 +4341,9 @@ set_loop_bounds (gfc_loopinfo *loop) } /* Transform everything so we have a simple incrementing variable. */ - if (n < loop->dimen && integer_onep (info->stride[dim])) + if (integer_onep (info->stride[dim])) info->delta[dim] = gfc_index_zero_node; - else if (n < loop->dimen) + else { /* Set the delta for this section. */ info->delta[dim] = gfc_evaluate_now (loop->from[n], &loop->pre); diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index fc8a9ed4e4b..67bd3e233f0 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -718,7 +718,7 @@ gfc_get_module_backend_decl (gfc_symbol *sym) } else if (s->backend_decl) { - if (sym->ts.type == BT_DERIVED) + if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS) gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived, true); else if (sym->ts.type == BT_CHARACTER) @@ -1670,6 +1670,11 @@ gfc_get_extern_function_decl (gfc_symbol * sym) gfc_find_symbol (sym->name, gsym->ns, 0, &s); if (s && s->backend_decl) { + if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS) + gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived, + true); + else if (sym->ts.type == BT_CHARACTER) + sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl; sym->backend_decl = s->backend_decl; return sym->backend_decl; } diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 0d793f96858..b21be45a96d 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -1259,7 +1259,8 @@ gfc_trans_simple_do (gfc_code * code, stmtblock_t *pblock, tree dovar, loc = code->ext.iterator->start->where.lb->location; /* Initialize the DO variable: dovar = from. */ - gfc_add_modify_loc (loc, pblock, dovar, from); + gfc_add_modify_loc (loc, pblock, dovar, + fold_convert (TREE_TYPE(dovar), from)); /* Save value for do-tinkering checking. */ if (gfc_option.rtcheck & GFC_RTCHECK_DO) diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 3f4ebd5b7b7..d643c2e45b8 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -2188,6 +2188,9 @@ gfc_copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to, gfc_component *to_cm; gfc_component *from_cm; + if (from == to) + return 1; + if (from->backend_decl == NULL || !gfc_compare_derived_types (from, to)) return 0; |