diff options
author | Tobias Burnus <burnus@net-b.de> | 2012-07-20 22:15:59 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2012-07-20 22:15:59 +0200 |
commit | 95d47b8dbceac322d91aafce5b30c013e0366642 (patch) | |
tree | 0bacb7035795e576dbadde0bd51bd2737e46847e /gcc | |
parent | 5d8c54a731b5ea98c5f2a64bb963a8a4663a21db (diff) | |
download | gcc-95d47b8dbceac322d91aafce5b30c013e0366642.zip gcc-95d47b8dbceac322d91aafce5b30c013e0366642.tar.gz gcc-95d47b8dbceac322d91aafce5b30c013e0366642.tar.bz2 |
decl.c (gfc_verify_c_interop_param): Allow assumed-shape with -std=f2008ts.
2012-07-20 Tobias Burnus <burnus@net-b.de>
* decl.c (gfc_verify_c_interop_param): Allow assumed-shape
with -std=f2008ts.
2012-07-20 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/bind_c_array_params_2.f90: New.
* gfortran.dg/bind_c_array_params.f03: Add -std=f2003
and update dg-error.
From-SVN: r189726
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 32 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/bind_c_array_params.f03 | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90 | 19 |
5 files changed, 41 insertions, 24 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0d8b4ba..f8558a6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,10 @@ 2012-07-20 Tobias Burnus <burnus@net-b.de> + * decl.c (gfc_verify_c_interop_param): Allow assumed-shape + with -std=f2008ts. + +2012-07-20 Tobias Burnus <burnus@net-b.de> + PR fortran/48820 * array.c (match_array_element_spec, gfc_match_array_spec, spec_size, gfc_array_dimen_size): Add support for diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 66e2ca8..28e5a5b 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1095,29 +1095,15 @@ gfc_verify_c_interop_param (gfc_symbol *sym) retval = FAILURE; /* Make sure that if it has the dimension attribute, that it is - either assumed size or explicit shape. */ - if (sym->as != NULL) - { - if (sym->as->type == AS_ASSUMED_SHAPE) - { - gfc_error ("Assumed-shape array '%s' at %L cannot be an " - "argument to the procedure '%s' at %L because " - "the procedure is BIND(C)", sym->name, - &(sym->declared_at), sym->ns->proc_name->name, - &(sym->ns->proc_name->declared_at)); - retval = FAILURE; - } - - if (sym->as->type == AS_DEFERRED) - { - gfc_error ("Deferred-shape array '%s' at %L cannot be an " - "argument to the procedure '%s' at %L because " - "the procedure is BIND(C)", sym->name, - &(sym->declared_at), sym->ns->proc_name->name, - &(sym->ns->proc_name->declared_at)); - retval = FAILURE; - } - } + either assumed size or explicit shape. Deferred shape is already + covered by the pointer/allocatable attribute. */ + if (sym->as != NULL && sym->as->type == AS_ASSUMED_SHAPE + && gfc_notify_std (GFC_STD_F2008_TS, "Assumed-shape array '%s' " + "at %L as dummy argument to the BIND(C) " + "procedure '%s' at %L", sym->name, + &(sym->declared_at), sym->ns->proc_name->name, + &(sym->ns->proc_name->declared_at)) == FAILURE) + retval = FAILURE; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee773e8..1b49f13 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2012-07-20 Tobias Burnus <burnus@net-b.de> + * gfortran.dg/bind_c_array_params_2.f90: New. + * gfortran.dg/bind_c_array_params.f03: Add -std=f2003 + and update dg-error. + +2012-07-20 Tobias Burnus <burnus@net-b.de> + * gfortran.dg/assumed_rank_12.f90: Update dg-error. 2012-07-20 Jason Merrill <jason@redhat.com> diff --git a/gcc/testsuite/gfortran.dg/bind_c_array_params.f03 b/gcc/testsuite/gfortran.dg/bind_c_array_params.f03 index 6590db1..810f642 100644 --- a/gcc/testsuite/gfortran.dg/bind_c_array_params.f03 +++ b/gcc/testsuite/gfortran.dg/bind_c_array_params.f03 @@ -1,10 +1,11 @@ ! { dg-do compile } +! { dg-options "-std=f2003" } module bind_c_array_params use, intrinsic :: iso_c_binding implicit none contains - subroutine sub0(assumed_array) bind(c) ! { dg-error "cannot be an argument" } + subroutine sub0(assumed_array) bind(c) ! { dg-error "TS 29113: Assumed-shape array 'assumed_array' at .1. as dummy argument to the BIND.C. procedure 'sub0'" } integer(c_int), dimension(:) :: assumed_array end subroutine sub0 diff --git a/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90 b/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90 new file mode 100644 index 0000000..b6c8429 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_array_params_2.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! { dg-options "-std=f2008ts -fdump-tree-original" } +! +! Check that assumed-shape variables are correctly passed to BIND(C) +! as defined in TS 29913 +! +interface + subroutine test (xx) bind(C, name="myBindC") + type(*), dimension(:,:) :: xx + end subroutine test +end interface + +integer :: aa(4,4) +call test(aa) +end + +! { dg-final { scan-tree-dump-times "test \\\(&parm\\." 1 "original" } } +! { dg-final { scan-assembler-times "myBindC" 1 } } + |