aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-08-31 06:51:31 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-08-31 06:51:31 +0000
commit4e227341f6e6c3ceef721d3839c8d9eb6292db70 (patch)
tree0527c447bb8c74cd2c74bd4f96e460ce137bded9 /gcc/fortran/trans.c
parentee3ec8ac28ce03874214bde9148bc6e5c6705915 (diff)
downloadgcc-4e227341f6e6c3ceef721d3839c8d9eb6292db70.zip
gcc-4e227341f6e6c3ceef721d3839c8d9eb6292db70.tar.gz
gcc-4e227341f6e6c3ceef721d3839c8d9eb6292db70.tar.bz2
re PR fortran/86328 (Runtime segfault reading an allocatable class(*) object in allocate statements)
2018-08-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/86328 PR fortran/86760 * trans-array.c (gfc_conv_scalarized_array_ref): Do not fix info->descriptor but pass it directly to gfc_build_array_ref. (gfc_conv_array_ref): Likewise for se->expr. * trans.c (gfc_build_array_ref): If 'decl' is a COMPONENT_REF obtain the span field directly from it. 2018-08-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/86328 PR fortran/86760 * gfortran.dg/pr86328.f90 : New test. in comment 12 of the PR. * gfortran.dg/pr86760.f90 : New test. From-SVN: r264008
Diffstat (limited to 'gcc/fortran/trans.c')
-rw-r--r--gcc/fortran/trans.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index aa10fbb..153bab6 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -407,7 +407,12 @@ gfc_build_array_ref (tree base, tree offset, tree decl, tree vptr)
if (vptr)
span = gfc_vptr_size_get (vptr);
else if (decl)
- span = get_array_span (type, decl);
+ {
+ if (TREE_CODE (decl) == COMPONENT_REF)
+ span = gfc_conv_descriptor_span_get (decl);
+ else
+ span = get_array_span (type, decl);
+ }
/* If a non-null span has been generated reference the element with
pointer arithmetic. */