diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2010-11-11 23:34:05 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2010-11-11 23:34:05 +0000 |
commit | f76b96c20da8e6675d44f976bbe54ea62f5e5e69 (patch) | |
tree | 635195a00e1d975324cb76c55c6024d31ddf0ca5 /gcc | |
parent | a9c64730c2ac1eb5504209d27560d3eaebfdaff1 (diff) | |
download | gcc-f76b96c20da8e6675d44f976bbe54ea62f5e5e69.zip gcc-f76b96c20da8e6675d44f976bbe54ea62f5e5e69.tar.gz gcc-f76b96c20da8e6675d44f976bbe54ea62f5e5e69.tar.bz2 |
symbol.c (verify_bind_c_derived_type): Accept BIND(C) on an empty derived type.
2010-11-10 Steven G. Kargl <kargl@gcc.gnu.org>
* symbol.c (verify_bind_c_derived_type): Accept BIND(C) on an empty
derived type.
2010-11-10 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/empty_derived_type.f90: New test.
From-SVN: r166633
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/symbol.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/empty_derived_type.f90 | 7 |
4 files changed, 31 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3e04b60..41a5bef 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2010-11-11 Steven G. Kargl <kargl@gcc.gnu.org> + + * symbol.c (verify_bind_c_derived_type): Accept BIND(C) on an empty + derived type. + 2010-11-11 Jan Hubicka <jh@suse.cz> * options.c (gfc_post_options): Remove flag_whopr. diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 9dd75490..05c6235 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -3592,14 +3592,25 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym) curr_comp = derived_sym->components; - /* TODO: is this really an error? */ + /* Fortran 2003 allows an empty derived type. C99 appears to disallow an + empty struct. Section 15.2 in Fortran 2003 states: "The following + subclauses define the conditions under which a Fortran entity is + interoperable. If a Fortran entity is interoperable, an equivalent + entity may be defined by means of C and the Fortran entity is said + to be interoperable with the C entity. There does not have to be such + an interoperating C entity." + */ if (curr_comp == NULL) { - gfc_error ("Derived type '%s' at %L is empty", - derived_sym->name, &(derived_sym->declared_at)); - return FAILURE; + gfc_warning ("Derived type '%s' with BIND(C) attribute at %L is empty, " + "and may be inaccessible by the C companion processor", + derived_sym->name, &(derived_sym->declared_at)); + derived_sym->ts.is_c_interop = 1; + derived_sym->attr.is_bind_c = 1; + return SUCCESS; } + /* Initialize the derived type as being C interoperable. If we find an error in the components, this will be set false. */ derived_sym->ts.is_c_interop = 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 381b9c2..c054688 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-11-11 Steven G. Kargl <kargl@gcc.gnu.org> + + * gfortran.dg/empty_derived_type.f90: New test. + 2010-11-11 Tobias Burnus <burnus@net-b.de> PR fortran/46413 diff --git a/gcc/testsuite/gfortran.dg/empty_derived_type.f90 b/gcc/testsuite/gfortran.dg/empty_derived_type.f90 new file mode 100644 index 0000000..6bf616c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/empty_derived_type.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +module stuff + implicit none + type, bind(C) :: junk ! { dg-warning "may be inaccessible by the C companion" } + ! Empty! + end type junk +end module stuff |