mirror of git://gcc.gnu.org/git/gcc.git
fortran: [PR121628]
The PR121628 deep-copy helper reused a static seen_derived_types set across wrapper generation, so recursive allocatable arrays that appeared multiple times in a derived type caused infinite compile-time recursion. Save and restore the set around each wrapper build, polish follow-ups, and add a regression test to keep the scenario covered. gcc/fortran/ChangeLog: PR fortran/121628 * trans-array.cc (seen_derived_types): Move to file scope and preserve/restore around generate_element_copy_wrapper. * trans-intrinsic.cc (conv_intrinsic_atomic_op): Reuse gfc_trans_force_lval when forcing addressable CAF temps. gcc/testsuite/ChangeLog: PR fortran/121628 * gfortran.dg/alloc_comp_deep_copy_7.f90: New test. libgfortran/ChangeLog: PR fortran/121628 * Makefile.in: Keep continuation indentation within 80 columns. * aclocal.m4: Regenerate. * libgfortran.h: Drop unused forward declaration. Signed-off-by: Christopher Albert <albert@tugraz.at>
This commit is contained in:
parent
77e10b47f2
commit
a1fe2cfa89
|
|
@ -10025,6 +10025,7 @@ enum {DEALLOCATE_ALLOC_COMP = 1, NULLIFY_ALLOC_COMP,
|
||||||
|
|
||||||
static gfc_actual_arglist *pdt_param_list;
|
static gfc_actual_arglist *pdt_param_list;
|
||||||
static bool generating_copy_helper;
|
static bool generating_copy_helper;
|
||||||
|
static hash_set<gfc_symbol *> seen_derived_types;
|
||||||
|
|
||||||
/* Forward declaration of structure_alloc_comps for wrapper generator. */
|
/* Forward declaration of structure_alloc_comps for wrapper generator. */
|
||||||
static tree structure_alloc_comps (gfc_symbol *, tree, tree, int, int, int,
|
static tree structure_alloc_comps (gfc_symbol *, tree, tree, int, int, int,
|
||||||
|
|
@ -10115,6 +10116,17 @@ generate_element_copy_wrapper (gfc_symbol *der_type, tree comp_type,
|
||||||
bool saved_generating = generating_copy_helper;
|
bool saved_generating = generating_copy_helper;
|
||||||
generating_copy_helper = true;
|
generating_copy_helper = true;
|
||||||
|
|
||||||
|
/* When generating a wrapper, we need a fresh type tracking state to
|
||||||
|
avoid inheriting the parent context's seen_derived_types, which would
|
||||||
|
cause infinite recursion when the wrapper tries to handle the same
|
||||||
|
recursive type. Save elements, clear the set, generate wrapper, then
|
||||||
|
restore elements. */
|
||||||
|
vec<gfc_symbol *> saved_symbols = vNULL;
|
||||||
|
for (hash_set<gfc_symbol *>::iterator it = seen_derived_types.begin ();
|
||||||
|
it != seen_derived_types.end (); ++it)
|
||||||
|
saved_symbols.safe_push (*it);
|
||||||
|
seen_derived_types.empty ();
|
||||||
|
|
||||||
der_type_ptr = build_pointer_type (comp_type);
|
der_type_ptr = build_pointer_type (comp_type);
|
||||||
dest_typed = fold_convert (der_type_ptr, dest_parm);
|
dest_typed = fold_convert (der_type_ptr, dest_parm);
|
||||||
src_typed = fold_convert (der_type_ptr, src_parm);
|
src_typed = fold_convert (der_type_ptr, src_parm);
|
||||||
|
|
@ -10126,6 +10138,11 @@ generate_element_copy_wrapper (gfc_symbol *der_type, tree comp_type,
|
||||||
0, purpose, caf_mode, NULL, false);
|
0, purpose, caf_mode, NULL, false);
|
||||||
gfc_add_expr_to_block (&block, body);
|
gfc_add_expr_to_block (&block, body);
|
||||||
|
|
||||||
|
/* Restore saved symbols. */
|
||||||
|
seen_derived_types.empty ();
|
||||||
|
for (unsigned i = 0; i < saved_symbols.length (); i++)
|
||||||
|
seen_derived_types.add (saved_symbols[i]);
|
||||||
|
saved_symbols.release ();
|
||||||
generating_copy_helper = saved_generating;
|
generating_copy_helper = saved_generating;
|
||||||
|
|
||||||
body = gfc_finish_block (&block);
|
body = gfc_finish_block (&block);
|
||||||
|
|
@ -10173,7 +10190,6 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
|
||||||
int caf_dereg_mode;
|
int caf_dereg_mode;
|
||||||
symbol_attribute *attr;
|
symbol_attribute *attr;
|
||||||
bool deallocate_called;
|
bool deallocate_called;
|
||||||
static hash_set<gfc_symbol *> seen_derived_types;
|
|
||||||
|
|
||||||
gfc_init_block (&fnblock);
|
gfc_init_block (&fnblock);
|
||||||
|
|
||||||
|
|
@ -10984,9 +11000,10 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
|
||||||
false, false, NULL_TREE, NULL_TREE);
|
false, false, NULL_TREE, NULL_TREE);
|
||||||
gfc_add_expr_to_block (&fnblock, tmp);
|
gfc_add_expr_to_block (&fnblock, tmp);
|
||||||
}
|
}
|
||||||
/* Special case: recursive allocatable array components require runtime
|
/* Special case: recursive allocatable array components require
|
||||||
helper to avoid compile-time infinite recursion. Generate a call to
|
runtime helpers to avoid compile-time infinite recursion. Generate
|
||||||
_gfortran_cfi_deep_copy_array with an element copy wrapper. */
|
a call to _gfortran_cfi_deep_copy_array with an element copy
|
||||||
|
wrapper. When inside a wrapper, reuse current_function_decl. */
|
||||||
else if (c->attr.allocatable && c->as && cmp_has_alloc_comps && same_type
|
else if (c->attr.allocatable && c->as && cmp_has_alloc_comps && same_type
|
||||||
&& purpose == COPY_ALLOC_COMP && !c->attr.proc_pointer
|
&& purpose == COPY_ALLOC_COMP && !c->attr.proc_pointer
|
||||||
&& !c->attr.codimension && !caf_in_coarray (caf_mode)
|
&& !c->attr.codimension && !caf_in_coarray (caf_mode)
|
||||||
|
|
@ -10997,8 +11014,9 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
|
||||||
tree alloc_expr;
|
tree alloc_expr;
|
||||||
int comp_rank;
|
int comp_rank;
|
||||||
|
|
||||||
/* Get the element type from ctype (which is already the component type).
|
/* Get the element type from ctype (already the component
|
||||||
For arrays, we need the element type, not the array type. */
|
type). For arrays we need the element type, not the array
|
||||||
|
type. */
|
||||||
elem_type = ctype;
|
elem_type = ctype;
|
||||||
if (GFC_DESCRIPTOR_TYPE_P (ctype))
|
if (GFC_DESCRIPTOR_TYPE_P (ctype))
|
||||||
elem_type = gfc_get_element_type (ctype);
|
elem_type = gfc_get_element_type (ctype);
|
||||||
|
|
@ -11012,29 +11030,36 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
|
||||||
comp_rank);
|
comp_rank);
|
||||||
gfc_add_expr_to_block (&fnblock, alloc_expr);
|
gfc_add_expr_to_block (&fnblock, alloc_expr);
|
||||||
|
|
||||||
/* Generate or reuse the element copy helper. Inside an existing helper
|
/* Generate or reuse the element copy helper. Inside an
|
||||||
we can reuse the current function to prevent recursive generation. */
|
existing helper we can reuse the current function to
|
||||||
|
prevent recursive generation. */
|
||||||
if (inside_wrapper)
|
if (inside_wrapper)
|
||||||
copy_wrapper = gfc_build_addr_expr (NULL_TREE, current_function_decl);
|
copy_wrapper
|
||||||
|
= gfc_build_addr_expr (NULL_TREE, current_function_decl);
|
||||||
else
|
else
|
||||||
copy_wrapper = generate_element_copy_wrapper (c->ts.u.derived,
|
copy_wrapper
|
||||||
elem_type,
|
= generate_element_copy_wrapper (c->ts.u.derived, elem_type,
|
||||||
purpose, caf_mode);
|
purpose, caf_mode);
|
||||||
copy_wrapper = fold_convert (helper_ptr_type, copy_wrapper);
|
copy_wrapper = fold_convert (helper_ptr_type, copy_wrapper);
|
||||||
|
|
||||||
/* Build addresses of descriptors. */
|
/* Build addresses of descriptors. */
|
||||||
dest_addr = gfc_build_addr_expr (pvoid_type_node, dcmp);
|
dest_addr = gfc_build_addr_expr (pvoid_type_node, dcmp);
|
||||||
src_addr = gfc_build_addr_expr (pvoid_type_node, comp);
|
src_addr = gfc_build_addr_expr (pvoid_type_node, comp);
|
||||||
|
|
||||||
/* Build call: _gfortran_cfi_deep_copy_array (&dcmp, &comp, wrapper). */
|
/* Build call: _gfortran_cfi_deep_copy_array (&dcmp, &comp,
|
||||||
|
wrapper). */
|
||||||
call = build_call_expr_loc (input_location,
|
call = build_call_expr_loc (input_location,
|
||||||
gfor_fndecl_cfi_deep_copy_array, 3,
|
gfor_fndecl_cfi_deep_copy_array, 3,
|
||||||
dest_addr, src_addr, copy_wrapper);
|
dest_addr, src_addr,
|
||||||
|
copy_wrapper);
|
||||||
gfc_add_expr_to_block (&fnblock, call);
|
gfc_add_expr_to_block (&fnblock, call);
|
||||||
}
|
}
|
||||||
else if (c->attr.allocatable && !c->attr.proc_pointer
|
else if (c->attr.allocatable && !c->attr.proc_pointer
|
||||||
&& (add_when_allocated != NULL_TREE || !cmp_has_alloc_comps || !c->as
|
&& (add_when_allocated != NULL_TREE
|
||||||
|| c->attr.codimension || caf_in_coarray (caf_mode)))
|
|| !cmp_has_alloc_comps
|
||||||
|
|| !c->as
|
||||||
|
|| c->attr.codimension
|
||||||
|
|| caf_in_coarray (caf_mode)))
|
||||||
{
|
{
|
||||||
rank = c->as ? c->as->rank : 0;
|
rank = c->as ? c->as->rank : 0;
|
||||||
if (c->attr.codimension)
|
if (c->attr.codimension)
|
||||||
|
|
|
||||||
|
|
@ -12559,24 +12559,23 @@ conv_intrinsic_atomic_op (gfc_code *code)
|
||||||
else
|
else
|
||||||
image_index = integer_zero_node;
|
image_index = integer_zero_node;
|
||||||
|
|
||||||
/* Create a temporary if value is not already a pointer, or if it's an
|
/* Ensure VALUE names addressable storage: taking the address of a
|
||||||
address of a constant (which is invalid in C). */
|
constant is invalid in C, and scalars need a temporary as well. */
|
||||||
bool need_tmp = !POINTER_TYPE_P (TREE_TYPE (value));
|
if (!POINTER_TYPE_P (TREE_TYPE (value)))
|
||||||
if (POINTER_TYPE_P (TREE_TYPE (value))
|
|
||||||
&& TREE_CODE (value) == ADDR_EXPR
|
|
||||||
&& TREE_CONSTANT (TREE_OPERAND (value, 0)))
|
|
||||||
need_tmp = true;
|
|
||||||
|
|
||||||
if (need_tmp)
|
|
||||||
{
|
{
|
||||||
tmp = gfc_create_var (TREE_TYPE (TREE_TYPE (atom)), "value");
|
tree elem
|
||||||
if (POINTER_TYPE_P (TREE_TYPE (value)))
|
= fold_convert (TREE_TYPE (TREE_TYPE (atom)), value);
|
||||||
gfc_add_modify (&block, tmp,
|
elem = gfc_trans_force_lval (&block, elem);
|
||||||
fold_convert (TREE_TYPE (tmp),
|
value = gfc_build_addr_expr (NULL_TREE, elem);
|
||||||
build_fold_indirect_ref (value)));
|
}
|
||||||
else
|
else if (TREE_CODE (value) == ADDR_EXPR
|
||||||
gfc_add_modify (&block, tmp, fold_convert (TREE_TYPE (tmp), value));
|
&& TREE_CONSTANT (TREE_OPERAND (value, 0)))
|
||||||
value = gfc_build_addr_expr (NULL_TREE, tmp);
|
{
|
||||||
|
tree elem
|
||||||
|
= fold_convert (TREE_TYPE (TREE_TYPE (atom)),
|
||||||
|
build_fold_indirect_ref (value));
|
||||||
|
elem = gfc_trans_force_lval (&block, elem);
|
||||||
|
value = gfc_build_addr_expr (NULL_TREE, elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
gfc_init_se (&argse, NULL);
|
gfc_init_se (&argse, NULL);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR fortran/121628
|
||||||
|
! Test that derived types with multiple recursive allocatable array
|
||||||
|
! components compile without ICE. This was broken by the initial deep-copy
|
||||||
|
! patch which caused infinite compile-time recursion due to seen_derived_types
|
||||||
|
! persisting across wrapper generation.
|
||||||
|
!
|
||||||
|
! The fix saves and restores seen_derived_types when generating element
|
||||||
|
! copy wrappers to prevent inheriting parent context state.
|
||||||
|
!
|
||||||
|
|
||||||
|
program alloc_comp_deep_copy_7
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
type :: nested_t
|
||||||
|
type(nested_t), allocatable :: children(:)
|
||||||
|
type(nested_t), allocatable :: relatives(:)
|
||||||
|
end type nested_t
|
||||||
|
|
||||||
|
type(nested_t) :: a
|
||||||
|
|
||||||
|
end program alloc_comp_deep_copy_7
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Makefile.in generated by automake 1.15.1 from Makefile.am.
|
# Makefile.in generated by automake 1.15 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -231,8 +231,8 @@ libgfortran_la_LIBADD =
|
||||||
@LIBGFOR_MINIMAL_FALSE@ runtime/fpu.lo runtime/main.lo \
|
@LIBGFOR_MINIMAL_FALSE@ runtime/fpu.lo runtime/main.lo \
|
||||||
@LIBGFOR_MINIMAL_FALSE@ runtime/pause.lo runtime/stop.lo
|
@LIBGFOR_MINIMAL_FALSE@ runtime/pause.lo runtime/stop.lo
|
||||||
am__objects_3 = runtime/bounds.lo runtime/compile_options.lo \
|
am__objects_3 = runtime/bounds.lo runtime/compile_options.lo \
|
||||||
runtime/deep_copy.lo runtime/memory.lo runtime/string.lo runtime/select.lo \
|
runtime/deep_copy.lo runtime/memory.lo runtime/string.lo \
|
||||||
$(am__objects_1) $(am__objects_2)
|
runtime/select.lo $(am__objects_1) $(am__objects_2)
|
||||||
am__objects_4 = generated/matmul_i1.lo generated/matmul_i2.lo \
|
am__objects_4 = generated/matmul_i1.lo generated/matmul_i2.lo \
|
||||||
generated/matmul_i4.lo generated/matmul_i8.lo \
|
generated/matmul_i4.lo generated/matmul_i8.lo \
|
||||||
generated/matmul_i16.lo generated/matmul_r4.lo \
|
generated/matmul_i16.lo generated/matmul_r4.lo \
|
||||||
|
|
@ -1013,9 +1013,9 @@ gfor_helper_src = intrinsics/associated.c intrinsics/abort.c \
|
||||||
@IEEE_SUPPORT_TRUE@ieee/ieee_exceptions.F90 \
|
@IEEE_SUPPORT_TRUE@ieee/ieee_exceptions.F90 \
|
||||||
@IEEE_SUPPORT_TRUE@ieee/ieee_features.F90
|
@IEEE_SUPPORT_TRUE@ieee/ieee_features.F90
|
||||||
|
|
||||||
gfor_src = runtime/bounds.c runtime/compile_options.c runtime/deep_copy.c \
|
gfor_src = runtime/bounds.c runtime/compile_options.c \
|
||||||
runtime/memory.c runtime/string.c runtime/select.c $(am__append_6) \
|
runtime/deep_copy.c runtime/memory.c runtime/string.c \
|
||||||
$(am__append_7)
|
runtime/select.c $(am__append_6) $(am__append_7)
|
||||||
i_matmul_c = \
|
i_matmul_c = \
|
||||||
generated/matmul_i1.c \
|
generated/matmul_i1.c \
|
||||||
generated/matmul_i2.c \
|
generated/matmul_i2.c \
|
||||||
|
|
@ -4492,6 +4492,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/bounds.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/bounds.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/compile_options.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/compile_options.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/convert_char.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/convert_char.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/deep_copy.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/environ.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/environ.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/error.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/error.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/fpu.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/fpu.Plo@am__quote@
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
|
# generated automatically by aclocal 1.15 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
|
||||||
If you have problems, you may need to regenerate the build system entirely.
|
If you have problems, you may need to regenerate the build system entirely.
|
||||||
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
||||||
|
|
||||||
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||||
[am__api_version='1.15'
|
[am__api_version='1.15'
|
||||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||||
dnl require some minimum version. Point them to the right macro.
|
dnl require some minimum version. Point them to the right macro.
|
||||||
m4_if([$1], [1.15.1], [],
|
m4_if([$1], [1.15], [],
|
||||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
||||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
[AM_AUTOMAKE_VERSION([1.15.1])dnl
|
[AM_AUTOMAKE_VERSION([1.15])dnl
|
||||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||||
|
|
||||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
||||||
|
|
||||||
# AM_CONDITIONAL -*- Autoconf -*-
|
# AM_CONDITIONAL -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
|
||||||
Usually this means the macro was only invoked conditionally.]])
|
Usually this means the macro was only invoked conditionally.]])
|
||||||
fi])])
|
fi])])
|
||||||
|
|
||||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
|
||||||
|
|
||||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -408,7 +408,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||||
|
|
||||||
# Do all the work for Automake. -*- Autoconf -*-
|
# Do all the work for Automake. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -605,7 +605,7 @@ for _am_header in $config_headers :; do
|
||||||
done
|
done
|
||||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -629,7 +629,7 @@ AC_SUBST([install_sh])])
|
||||||
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
||||||
# From Jim Meyering
|
# From Jim Meyering
|
||||||
|
|
||||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -664,7 +664,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
||||||
|
|
||||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -714,7 +714,7 @@ rm -f confinc confmf
|
||||||
|
|
||||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -753,7 +753,7 @@ fi
|
||||||
|
|
||||||
# Helper functions for option handling. -*- Autoconf -*-
|
# Helper functions for option handling. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -782,7 +782,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
|
||||||
AC_DEFUN([_AM_IF_OPTION],
|
AC_DEFUN([_AM_IF_OPTION],
|
||||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||||
|
|
||||||
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -829,7 +829,7 @@ AC_LANG_POP([C])])
|
||||||
# For backward compatibility.
|
# For backward compatibility.
|
||||||
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
|
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -848,7 +848,7 @@ AC_DEFUN([AM_RUN_LOG],
|
||||||
|
|
||||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -929,7 +929,7 @@ AC_CONFIG_COMMANDS_PRE(
|
||||||
rm -f conftest.file
|
rm -f conftest.file
|
||||||
])
|
])
|
||||||
|
|
||||||
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2009-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -989,7 +989,7 @@ AC_SUBST([AM_BACKSLASH])dnl
|
||||||
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
|
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -1017,7 +1017,7 @@ fi
|
||||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||||
|
|
||||||
# Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -1036,7 +1036,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||||
|
|
||||||
# Check how to create a tarball. -*- Autoconf -*-
|
# Check how to create a tarball. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2004-2017 Free Software Foundation, Inc.
|
# Copyright (C) 2004-2014 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
|
||||||
|
|
@ -914,9 +914,6 @@ internal_proto(xcalloc);
|
||||||
extern void *xrealloc (void *, size_t);
|
extern void *xrealloc (void *, size_t);
|
||||||
internal_proto(xrealloc);
|
internal_proto(xrealloc);
|
||||||
|
|
||||||
/* deep_copy.c - Runtime helper for recursive allocatable array components */
|
|
||||||
|
|
||||||
struct CFI_cdesc_t;
|
|
||||||
extern void cfi_deep_copy_array (gfc_array_void *,
|
extern void cfi_deep_copy_array (gfc_array_void *,
|
||||||
gfc_array_void *,
|
gfc_array_void *,
|
||||||
void (*copy_element) (void *, void *));
|
void (*copy_element) (void *, void *));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue