summaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2017-07-31 14:43:24 +0200
committerMartin Jambor <mjambor@suse.cz>2017-07-31 14:43:24 +0200
commitb32f12dece884f1fa0f04c643a77105aff6ce8bc (patch)
treecdab5f10806561fc198f907299b0e55eb5701ef0 /gcc/fortran
parent166bec868d991fdf71f9a66f994e5977fcab4aa2 (diff)
parenta168a775e93ec31ae743ad282d8e60fa1c116891 (diff)
downloadgcc-gcn.tar.gz
Merge branch 'master' into gcngcn
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog69
-rw-r--r--gcc/fortran/array.c8
-rw-r--r--gcc/fortran/check.c2
-rw-r--r--gcc/fortran/class.c1
-rw-r--r--gcc/fortran/dump-parse-tree.c3
-rw-r--r--gcc/fortran/interface.c4
-rw-r--r--gcc/fortran/ioparm.def2
-rw-r--r--gcc/fortran/openmp.c3
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/fortran/symbol.c4
-rw-r--r--gcc/fortran/trans-array.c5
-rw-r--r--gcc/fortran/trans-decl.c5
-rw-r--r--gcc/fortran/trans-stmt.c6
-rw-r--r--gcc/fortran/trans.c14
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;