diff options
author | Martin Liska <mliska@suse.cz> | 2022-09-20 13:53:30 +0200 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2022-09-20 13:53:30 +0200 |
commit | 6df29b782e87c6c800be0425023d8438fdc67b92 (patch) | |
tree | 48eebe497e384d66a7f5cf861b4b1b963785a2cd /gcc/fortran | |
parent | fdb97cd0b7d15efa39ba79dca44be93debb0ef12 (diff) | |
parent | 63e3cc294d835b43701eeef9410d1b8fc8922869 (diff) | |
download | gcc-6df29b782e87c6c800be0425023d8438fdc67b92.zip gcc-6df29b782e87c6c800be0425023d8438fdc67b92.tar.gz gcc-6df29b782e87c6c800be0425023d8438fdc67b92.tar.bz2 |
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 28 | ||||
-rw-r--r-- | gcc/fortran/f95-lang.cc | 2 | ||||
-rw-r--r-- | gcc/fortran/libgfortran.h | 1 | ||||
-rw-r--r-- | gcc/fortran/resolve.cc | 1 | ||||
-rw-r--r-- | gcc/fortran/simplify.cc | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-openmp.cc | 20 |
6 files changed, 34 insertions, 20 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 676f89f..f5f8ac0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,31 @@ +2022-09-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + * libgfortran.h: Declare GFC_FPE_AWAY. + +2022-09-15 Harald Anlauf <anlauf@gmx.de> + + PR fortran/106857 + * simplify.cc (gfc_simplify_pack): Check for NULL pointer dereferences + while walking through constructors (error recovery). + +2022-09-15 Harald Anlauf <anlauf@gmx.de> + Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/104314 + * resolve.cc (deferred_op_assign): Do not try to generate temporary + for deferred character length assignment if types do not agree. + +2022-09-15 Richard Biener <rguenther@suse.de> + + * f95-lang.cc (gfc_init_decl_processing): Do not initialize + void_list_node. + +2022-09-14 Julian Brown <julian@codesourcery.com> + + * trans-openmp.cc (gfc_trans_omp_clauses): Don't create + GOMP_MAP_TO_PSET mappings for class metadata, nor GOMP_MAP_POINTER + mappings for POINTER_TYPE_P decls. + 2022-09-10 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/95644 diff --git a/gcc/fortran/f95-lang.cc b/gcc/fortran/f95-lang.cc index ff4bf80..a6750be 100644 --- a/gcc/fortran/f95-lang.cc +++ b/gcc/fortran/f95-lang.cc @@ -530,8 +530,6 @@ gfc_init_decl_processing (void) only use it for actual characters, not for INTEGER(1). */ build_common_tree_nodes (false); - void_list_node = build_tree_list (NULL_TREE, void_type_node); - /* Set up F95 type nodes. */ gfc_init_kinds (); gfc_init_types (); diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h index ef06194..79a8c2f 100644 --- a/gcc/fortran/libgfortran.h +++ b/gcc/fortran/libgfortran.h @@ -60,6 +60,7 @@ along with GCC; see the file COPYING3. If not see #define GFC_FPE_TONEAREST 2 #define GFC_FPE_TOWARDZERO 3 #define GFC_FPE_UPWARD 4 +#define GFC_FPE_AWAY 5 /* Size of the buffer required to store FPU state for any target. In particular, this has to be larger than fenv_t on all glibc targets. diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index ca11475..ae7ebb6 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -11803,6 +11803,7 @@ deferred_op_assign (gfc_code **code, gfc_namespace *ns) if (!((*code)->expr1->ts.type == BT_CHARACTER && (*code)->expr1->ts.deferred && (*code)->expr1->rank + && (*code)->expr2->ts.type == BT_CHARACTER && (*code)->expr2->expr_type == EXPR_OP)) return false; diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index bc178d5..140c177 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -6431,7 +6431,7 @@ gfc_simplify_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector) /* Copy only those elements of ARRAY to RESULT whose MASK equals .TRUE.. */ mask_ctor = gfc_constructor_first (mask->value.constructor); - while (mask_ctor) + while (mask_ctor && array_ctor) { if (mask_ctor->expr->value.logical) { diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 1be7d23..8e9d534 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -3125,30 +3125,16 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, tree present = gfc_omp_check_optional_argument (decl, true); if (openacc && n->sym->ts.type == BT_CLASS) { - tree type = TREE_TYPE (decl); if (n->sym->attr.optional) sorry ("optional class parameter"); - if (POINTER_TYPE_P (type)) - { - node4 = build_omp_clause (input_location, - OMP_CLAUSE_MAP); - OMP_CLAUSE_SET_MAP_KIND (node4, GOMP_MAP_POINTER); - OMP_CLAUSE_DECL (node4) = decl; - OMP_CLAUSE_SIZE (node4) = size_int (0); - decl = build_fold_indirect_ref (decl); - } tree ptr = gfc_class_data_get (decl); ptr = build_fold_indirect_ref (ptr); OMP_CLAUSE_DECL (node) = ptr; OMP_CLAUSE_SIZE (node) = gfc_class_vtab_size_get (decl); node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); - OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_TO_PSET); - OMP_CLAUSE_DECL (node2) = decl; - OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type); - node3 = build_omp_clause (input_location, OMP_CLAUSE_MAP); - OMP_CLAUSE_SET_MAP_KIND (node3, GOMP_MAP_ATTACH_DETACH); - OMP_CLAUSE_DECL (node3) = gfc_class_data_get (decl); - OMP_CLAUSE_SIZE (node3) = size_int (0); + OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_ATTACH_DETACH); + OMP_CLAUSE_DECL (node2) = gfc_class_data_get (decl); + OMP_CLAUSE_SIZE (node2) = size_int (0); goto finalize_map_clause; } else if (POINTER_TYPE_P (TREE_TYPE (decl)) |