re PR fortran/50933 (Wrongly regards BIND(C) types as incompatible)
2011-11-03 Tobias Burnus <burnus@net-b.de> PR fortran/50933 * interface.c (gfc_compare_derived_types): Fix check for * BIND(C). 2011-11-03 Tobias Burnus <burnus@net-b.de> PR fortran/50933 * gfortran.dg/bind_c_dts_5.f90: New. From-SVN: r180879
This commit is contained in:
parent
1e4b137661
commit
a9e88ec6fe
4 changed files with 67 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-11-03 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50933
|
||||
* interface.c (gfc_compare_derived_types): Fix check for BIND(C).
|
||||
|
||||
2011-11-03 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50960
|
||||
|
|
|
@ -405,7 +405,7 @@ gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
|
|||
return 1;
|
||||
|
||||
/* Compare type via the rules of the standard. Both types must have
|
||||
the SEQUENCE attribute to be equal. */
|
||||
the SEQUENCE or BIND(C) attribute to be equal. */
|
||||
|
||||
if (strcmp (derived1->name, derived2->name))
|
||||
return 0;
|
||||
|
@ -414,7 +414,8 @@ gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
|
|||
|| derived2->component_access == ACCESS_PRIVATE)
|
||||
return 0;
|
||||
|
||||
if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0)
|
||||
if (!(derived1->attr.sequence && derived2->attr.sequence)
|
||||
&& !(derived1->attr.is_bind_c && derived2->attr.is_bind_c))
|
||||
return 0;
|
||||
|
||||
dt1 = derived1->components;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-11-03 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50933
|
||||
* gfortran.dg/bind_c_dts_5.f90: New.
|
||||
|
||||
2011-11-03 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/50960
|
||||
|
|
54
gcc/testsuite/gfortran.dg/bind_c_dts_5.f90
Normal file
54
gcc/testsuite/gfortran.dg/bind_c_dts_5.f90
Normal file
|
@ -0,0 +1,54 @@
|
|||
! { dg-do compile }
|
||||
!
|
||||
! PR fortran/50933
|
||||
!
|
||||
! Check whether type-compatibility checks for BIND(C) work.
|
||||
!
|
||||
! Contributed by Richard Maine
|
||||
!
|
||||
|
||||
MODULE liter_cb_mod
|
||||
USE ISO_C_BINDING
|
||||
CONTAINS
|
||||
FUNCTION liter_cb(link_info) bind(C)
|
||||
USE ISO_C_BINDING
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER(c_int) liter_cb
|
||||
|
||||
TYPE, bind(C) :: info_t
|
||||
INTEGER(c_int) :: type
|
||||
END TYPE info_t
|
||||
|
||||
TYPE(info_t) :: link_info
|
||||
|
||||
liter_cb = 0
|
||||
|
||||
END FUNCTION liter_cb
|
||||
|
||||
END MODULE liter_cb_mod
|
||||
|
||||
PROGRAM main
|
||||
USE ISO_C_BINDING
|
||||
interface
|
||||
FUNCTION liter_cb(link_info) bind(C)
|
||||
USE ISO_C_BINDING
|
||||
IMPLICIT NONE
|
||||
INTEGER(c_int) liter_cb
|
||||
TYPE, bind(C) :: info_t
|
||||
INTEGER(c_int) :: type
|
||||
END TYPE info_t
|
||||
TYPE(info_t) :: link_info
|
||||
END FUNCTION liter_cb
|
||||
end interface
|
||||
|
||||
TYPE, bind(C) :: info_t
|
||||
INTEGER(c_int) :: type
|
||||
END TYPE info_t
|
||||
type(info_t) :: link_info
|
||||
|
||||
write (*,*) liter_cb(link_info)
|
||||
|
||||
END PROGRAM main
|
||||
|
||||
! { dg-final { cleanup-modules "liter_cb_mod" } }
|
Loading…
Add table
Reference in a new issue