diff options
author | Martin Jambor <mjambor@suse.cz> | 2017-07-31 14:43:24 +0200 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2017-07-31 14:43:24 +0200 |
commit | b32f12dece884f1fa0f04c643a77105aff6ce8bc (patch) | |
tree | cdab5f10806561fc198f907299b0e55eb5701ef0 /gcc/fortran | |
parent | 166bec868d991fdf71f9a66f994e5977fcab4aa2 (diff) | |
parent | a168a775e93ec31ae743ad282d8e60fa1c116891 (diff) | |
download | gcc-gcn.tar.gz |
Merge branch 'master' into gcngcn
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 69 | ||||
-rw-r--r-- | gcc/fortran/array.c | 8 | ||||
-rw-r--r-- | gcc/fortran/check.c | 2 | ||||
-rw-r--r-- | gcc/fortran/class.c | 1 | ||||
-rw-r--r-- | gcc/fortran/dump-parse-tree.c | 3 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 4 | ||||
-rw-r--r-- | gcc/fortran/ioparm.def | 2 | ||||
-rw-r--r-- | gcc/fortran/openmp.c | 3 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 4 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 4 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-stmt.c | 6 | ||||
-rw-r--r-- | gcc/fortran/trans.c | 14 |
14 files changed, 109 insertions, 21 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 88fd0b327d7..dc0495af964 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,72 @@ +2017-07-31 Jakub Jelinek <jakub@redhat.com> + + * check.c (gfc_check_num_images): Fix a pasto. + +2017-07-29 Jakub Jelinek <jakub@redhat.com> + + * trans-decl.c (gfc_trans_use_stmts): Pass false as new argument to + the imported_module_or_decl debug hook. + +2017-07-28 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> + + * resolve.c (find_reachable_labels): Adjust. + +2017-07-25 Jakub Jelinek <jakub@redhat.com> + + * ioparm.def: Use 1U << 31 instead of 1 << 31 as flags2 mask. + +2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org> + + * dump-parse-tree.c (show_symbol): Show binding label if present. + +2017-07-24 Thomas Koenig <tkoenig@gcc.gnu.org> + Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/66102 + * fortran/trans-array.c (gfc_conv_resolve_dependencies): + Break if dependency has been found. + +2017-07-23 Alexander Monakov <amonakov@ispras.ru> + + * interface.c (pair_cmp): Fix gfc_symbol comparison. Adjust comment. + +2017-07-18 Nathan Sidwell <nathan@acm.org> + + * trans.c (gfc_build_array_ref): Use TYPE_MAX_VALUE. + +2017-07-09 Dominique d'Humieres <dominiq@lps.ens.fr> + + PR fortran/81341 + * class.c (class_array_ref_detected): Remove a redundant + condition. + +2017-07-06 Harald Anlauf <anlauf@gmx.de> + + PR fortran/70071 + * array.c (gfc_ref_dimen_size): Handle bad subscript triplets. + +2017-07-03 Dominique d'Humieres <dominiq@lps.ens.fr> + + PR fortran/79866 + * resolve.c (resolve_symbol): Fix typo. + +2017-07-03 Dominique d'Humieres <dominiq@lps.ens.fr> + + PR fortran/79843 + * symbol.c (check_conflict): Add missing "conflicts". + +2017-06-29 Cesar Philippidis <cesar@codesourcery.com> + + PR fortran/77765 + * openmp.c (gfc_match_oacc_routine): Check if proc_name exist before + comparing the routine name against it. + +2017-06-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/80164 + * trans-stmt.c (gfc_trans_call): If no code expr, use code->loc + as warning/error locus. + 2017-06-24 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/81160 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 30656c197d0..46642bb5d97 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -2203,9 +2203,15 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end) bool t; gfc_expr *stride_expr = NULL; - if (dimen < 0 || ar == NULL || dimen > ar->dimen - 1) + if (dimen < 0 || ar == NULL) gfc_internal_error ("gfc_ref_dimen_size(): Bad dimension"); + if (dimen > ar->dimen - 1) + { + gfc_error ("Bad array dimension at %L", &ar->c_where[dimen]); + return false; + } + switch (ar->dimen_type[dimen]) { case DIMEN_ELEMENT: diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 45bc68ef7ad..e85e398cd43 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -5149,7 +5149,7 @@ gfc_check_num_images (gfc_expr *distance, gfc_expr *failed) return false; if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to " - "NUM_IMAGES at %L", &distance->where)) + "NUM_IMAGES at %L", &failed->where)) return false; } diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 2d72e9570da..a345d131442 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -310,7 +310,6 @@ class_array_ref_detected (gfc_ref *ref, bool *full_array) else if (ref->next && ref->next->type == REF_ARRAY && !ref->next->next && ref->type == REF_COMPONENT - && ref->next->type == REF_ARRAY && ref->next->u.ar.type != AR_ELEMENT) { with_data = true; diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index 5b692e1ea9c..46b3705f4f8 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -857,6 +857,9 @@ show_symbol (gfc_symbol *sym) for (i=len; i<12; i++) fputc(' ', dumpfile); + if (sym->binding_label) + fprintf (dumpfile,"|| binding_label: '%s' ", sym->binding_label); + ++show_level; show_indent (); diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 6fe0647ecfe..13e2bdd6c7e 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -3294,7 +3294,7 @@ argpair; order: - p->a->expr == NULL - p->a->expr->expr_type != EXPR_VARIABLE - - growing p->a->expr->symbol. */ + - by gfc_symbol pointer value (larger first). */ static int pair_cmp (const void *p1, const void *p2) @@ -3320,6 +3320,8 @@ pair_cmp (const void *p1, const void *p2) } if (a2->expr->expr_type != EXPR_VARIABLE) return 1; + if (a1->expr->symtree->n.sym > a2->expr->symtree->n.sym) + return -1; return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym; } diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def index 9789dd164ae..ca5631b9cd9 100644 --- a/gcc/fortran/ioparm.def +++ b/gcc/fortran/ioparm.def @@ -82,7 +82,7 @@ IOPARM (inquire, read, 1 << 27, char2) IOPARM (inquire, write, 1 << 28, char1) IOPARM (inquire, readwrite, 1 << 29, char2) IOPARM (inquire, convert, 1 << 30, char1) -IOPARM (inquire, flags2, 1 << 31, int4) +IOPARM (inquire, flags2, 1U << 31, int4) IOPARM (inquire, asynchronous, 1 << 0, char1) IOPARM (inquire, decimal, 1 << 1, char2) IOPARM (inquire, encoding, 1 << 2, char1) diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 2b56558b7c1..8400354181c 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -2295,7 +2295,8 @@ gfc_match_oacc_routine (void) if (st) { sym = st->n.sym; - if (strcmp (sym->name, gfc_current_ns->proc_name->name) == 0) + if (gfc_current_ns->proc_name != NULL + && strcmp (sym->name, gfc_current_ns->proc_name->name) == 0) sym = NULL; } diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index a5f4874d513..5caf76761ee 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9098,7 +9098,7 @@ find_reachable_labels (gfc_code *block) if (!block) return; - cs_base->reachable_labels = bitmap_obstack_alloc (&labels_obstack); + cs_base->reachable_labels = bitmap_alloc (&labels_obstack); /* Collect labels in this block. We don't keep those corresponding to END {IF|SELECT}, these are checked in resolve_branch by going @@ -14525,7 +14525,7 @@ resolve_symbol (gfc_symbol *sym) && !sym->attr.codimension && !sym->ts.u.derived->attr.coarray_comp) { gfc_error ("Variable %s at %L of type EVENT_TYPE or with subcomponent of " - "type LOCK_TYPE must be a coarray", sym->name, + "type EVENT_TYPE must be a coarray", sym->name, &sym->declared_at); return; } diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index ec43e635bf3..3bc2b34768f 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -845,13 +845,13 @@ conflict: conflict_std: if (name == NULL) { - return gfc_notify_std (standard, "%s attribute " + return gfc_notify_std (standard, "%s attribute conflicts " "with %s attribute at %L", a1, a2, where); } else { - return gfc_notify_std (standard, "%s attribute " + return gfc_notify_std (standard, "%s attribute conflicts " "with %s attribute in %qs at %L", a1, a2, name, where); } diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 47e8c091a9b..9efb531a722 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -4577,7 +4577,10 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, && gfc_check_dependency (dest_expr, ss_expr, false)) ss_info->data.scalar.needs_temporary = 1; - continue; + if (nDepend) + break; + else + continue; } if (dest_expr->symtree->n.sym != ss_expr->symtree->n.sym) diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index b2f73b78466..74d860689ee 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -4875,7 +4875,7 @@ gfc_trans_use_stmts (gfc_namespace * ns) (*debug_hooks->imported_module_or_decl) (entry->namespace_decl, NULL_TREE, ns->proc_name->backend_decl, - false); + false, false); for (rent = use_stmt->rename; rent; rent = rent->next) { tree decl, local_name; @@ -4952,7 +4952,8 @@ gfc_trans_use_stmts (gfc_namespace * ns) gfc_set_backend_locus (&rent->where); (*debug_hooks->imported_module_or_decl) (decl, local_name, ns->proc_name->backend_decl, - !use_stmt->only_flag); + !use_stmt->only_flag, + false); } } } diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index e4f1da54ac7..a1e1dff72e0 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -452,7 +452,11 @@ gfc_trans_call (gfc_code * code, bool dependency_check, subscripts. This could be prevented in the elemental case as temporaries are handled separatedly (below in gfc_conv_elemental_dependencies). */ - gfc_conv_loop_setup (&loop, &code->expr1->where); + if (code->expr1) + gfc_conv_loop_setup (&loop, &code->expr1->where); + else + gfc_conv_loop_setup (&loop, &code->loc); + gfc_mark_ss_chain_used (ss, 1); /* Convert the arguments, checking for dependencies. */ diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 2323e0abe3d..8f0adde77e0 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -334,15 +334,15 @@ gfc_build_array_ref (tree base, tree offset, tree decl, tree vptr) /* Use pointer arithmetic for deferred character length array references. */ if (type && TREE_CODE (type) == ARRAY_TYPE - && TYPE_MAXVAL (TYPE_DOMAIN (type)) != NULL_TREE - && (VAR_P (TYPE_MAXVAL (TYPE_DOMAIN (type))) - || TREE_CODE (TYPE_MAXVAL (TYPE_DOMAIN (type))) == INDIRECT_REF) + && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE + && (VAR_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + || TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INDIRECT_REF) && decl - && (TREE_CODE (TYPE_MAXVAL (TYPE_DOMAIN (type))) == INDIRECT_REF + && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INDIRECT_REF || TREE_CODE (decl) == FUNCTION_DECL - || DECL_CONTEXT (TYPE_MAXVAL (TYPE_DOMAIN (type))) - == DECL_CONTEXT (decl))) - span = TYPE_MAXVAL (TYPE_DOMAIN (type)); + || (DECL_CONTEXT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + == DECL_CONTEXT (decl)))) + span = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); else span = NULL_TREE; |