[committed,Fortran] PR 92872 – Fix get_CFI_desc
diff mbox series

Message ID 1be00e2c-9714-9eaa-8700-2d80d28081ad@codesourcery.com
State New
Headers show
Series
  • [committed,Fortran] PR 92872 – Fix get_CFI_desc
Related show

Commit Message

Tobias Burnus Dec. 10, 2019, 10:35 a.m. UTC
Fix the condition; the DECL_LANG_SPECIFIC can be used for much more than 
just to save the decl.

Committed as Rev. 279160.

Tobias

Patch
diff mbox series

2019-12-10  Tobias Burnus  <tobias@codesourcery.com>

	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.

diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 5c27c065ff0..1b779988616 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/gfortran.dg/bind_c_optional-1.f90 b/gcc/testsuite/gfortran.dg/bind_c_optional-1.f90
new file mode 100644
index 00000000000..99409205b6f
--- /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