aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2019-12-10 10:32:12 +0000
committerTobias Burnus <burnus@gcc.gnu.org>2019-12-10 11:32:12 +0100
commit9995ce07f190d963ec52f52697ccc155dd079568 (patch)
tree7e8ad8c2c68ee9350a70f95aa17733dbc3fd61cc
parentc175aa77aa8a4ba1d950f2db8c66cee004888212 (diff)
downloadgcc-9995ce07f190d963ec52f52697ccc155dd079568.zip
gcc-9995ce07f190d963ec52f52697ccc155dd079568.tar.gz
gcc-9995ce07f190d963ec52f52697ccc155dd079568.tar.bz2
Fortran] PR 92872 – Fix get_CFI_desc
PR fortran/92872 * trans-array.c (get_CFI_desc): Fix cond whether saved desc exists. PR fortran/92872 * gfortran.dg/bind_c_optional-1.f90: New. From-SVN: r279160
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-array.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/bind_c_optional-1.f9022
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bbc00ae..86a1a14 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-10 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/92872
+ * trans-array.c (get_CFI_desc): Fix cond whether saved desc exists.
+
2019-12-09 David Malcolm <dmalcolm@redhat.com>
* error.c (gfc_diagnostic_starter): Add pp_newline call before
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 5c27c06..1b77998 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -882,7 +882,7 @@ get_CFI_desc (gfc_symbol *sym, gfc_expr *expr,
else
tmp = sym->backend_decl;
- if (tmp && DECL_LANG_SPECIFIC (tmp))
+ if (tmp && DECL_LANG_SPECIFIC (tmp) && GFC_DECL_SAVED_DESCRIPTOR (tmp))
tmp = GFC_DECL_SAVED_DESCRIPTOR (tmp);
*desc = tmp;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7ba847d..b43497c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-10 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/92872
+ * gfortran.dg/bind_c_optional-1.f90: New.
+
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
* gcc.dg/lto/tag-1_0.c, gcc.dg/lto/tag-1_1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/bind_c_optional-1.f90 b/gcc/testsuite/gfortran.dg/bind_c_optional-1.f90
new file mode 100644
index 0000000..9940920
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bind_c_optional-1.f90
@@ -0,0 +1,22 @@
+! { dg-do run }
+!
+! PR fortran/92872
+!
+! Contributed by G. Steinmetz
+!
+module m
+contains
+subroutine s(x) bind(c)
+ integer, allocatable, optional :: x(:)
+ x = [1, 2, 3]
+end
+end
+
+use m
+integer, allocatable :: y(:)
+! NOTE: starting at 0, otherwise it will fail due to PR 92189
+allocate(y(0:2))
+y = [9, 8, 7]
+call s(y)
+if (any (y /= [1, 2, 3])) stop 1
+end