diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-01-27 10:13:27 +0100 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-01-27 10:13:27 +0100 |
commit | 86075aa5dd0b1ed3f6c9c67d0d3058c6c5c19d65 (patch) | |
tree | 3a4df3f42a59eb04ea8504112bfe74248e68c562 /gcc/fortran/trans-expr.c | |
parent | 40bf3f1fd058028988b2625f89efe6bb811a4185 (diff) | |
download | gcc-86075aa5dd0b1ed3f6c9c67d0d3058c6c5c19d65.zip gcc-86075aa5dd0b1ed3f6c9c67d0d3058c6c5c19d65.tar.gz gcc-86075aa5dd0b1ed3f6c9c67d0d3058c6c5c19d65.tar.bz2 |
fortran] Fix PR 85781, ICE on valid
PR fortran/85781
* trans-expr.c (gfc_conv_substring): Handle non-ARRAY_TYPE strings
of Bind(C) procedures.
PR fortran/85781
* gfortran.dg/bind_c_char_2.f90: New.
* gfortran.dg/bind_c_char_3.f90: New.
* gfortran.dg/bind_c_char_4.f90: New.
* gfortran.dg/bind_c_char_5.f90: New.
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index e1c0fb2..5825a4b 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2334,8 +2334,12 @@ gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind, else tmp = build_fold_indirect_ref_loc (input_location, se->expr); - tmp = gfc_build_array_ref (tmp, start.expr, NULL); - se->expr = gfc_build_addr_expr (type, tmp); + /* For BIND(C), a BT_CHARACTER is not an ARRAY_TYPE. */ + if (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE) + { + tmp = gfc_build_array_ref (tmp, start.expr, NULL); + se->expr = gfc_build_addr_expr (type, tmp); + } } /* Length = end + 1 - start. */ |