re PR fortran/34187 (BIND(C): Public generic with private bind(c) specific does not use bind(C) name)
2007-11-23 Tobias Burnus <burnus@net-b.de> PR fortran/34187 * module.c (load_needed): Ensure binding_label is not lost. * decl.c (set_binding_label,gfc_match_bind_c): Replace strncpy by strcpy. 2007-11-23 Tobias Burnus <burnus@net-b.de> PR fortran/34187 * gfortran.dg/bind_c_usage_15.f90: New. From-SVN: r130386
This commit is contained in:
parent
88df9da158
commit
c5b5a17a92
@ -1,3 +1,11 @@
|
||||
2007-11-23 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/34187
|
||||
* module.c (load_needed): Ensure binding_label is not lost.
|
||||
|
||||
* decl.c (set_binding_label,gfc_match_bind_c): Replace
|
||||
strncpy by strcpy.
|
||||
|
||||
2007-11-23 Tobias Burnus <burnus@net-b.de>
|
||||
Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
|
@ -3126,15 +3126,14 @@ set_binding_label (char *dest_label, const char *sym_name, int num_idents)
|
||||
if (curr_binding_label[0] != '\0')
|
||||
{
|
||||
/* Binding label given; store in temp holder til have sym. */
|
||||
strncpy (dest_label, curr_binding_label,
|
||||
strlen (curr_binding_label) + 1);
|
||||
strcpy (dest_label, curr_binding_label);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No binding label given, and the NAME= specifier did not exist,
|
||||
which means there was no NAME="". */
|
||||
if (sym_name != NULL && has_name_equals == 0)
|
||||
strncpy (dest_label, sym_name, strlen (sym_name) + 1);
|
||||
strcpy (dest_label, sym_name);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
@ -4736,12 +4735,10 @@ gfc_match_bind_c (gfc_symbol *sym)
|
||||
{
|
||||
if (sym != NULL)
|
||||
{
|
||||
strncpy (sym->binding_label, binding_label,
|
||||
strlen (binding_label)+1);
|
||||
strcpy (sym->binding_label, binding_label);
|
||||
}
|
||||
else
|
||||
strncpy (curr_binding_label, binding_label,
|
||||
strlen (binding_label) + 1);
|
||||
strcpy (curr_binding_label, binding_label);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3419,6 +3419,7 @@ load_needed (pointer_info *p)
|
||||
|
||||
sym = gfc_new_symbol (p->u.rsym.true_name, ns);
|
||||
sym->module = gfc_get_string (p->u.rsym.module);
|
||||
strcpy (sym->binding_label, p->u.rsym.binding_label);
|
||||
|
||||
associate_integer_pointer (p, sym);
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-11-23 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/34187
|
||||
* gfortran.dg/bind_c_usage_15.f90: New.
|
||||
|
||||
2007-11-23 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/34192
|
||||
|
29
gcc/testsuite/gfortran.dg/bind_c_usage_15.f90
Normal file
29
gcc/testsuite/gfortran.dg/bind_c_usage_15.f90
Normal file
@ -0,0 +1,29 @@
|
||||
! { dg-do run }
|
||||
!
|
||||
! PR fortran/34187
|
||||
! The binding label was not exported for private procedures
|
||||
! with public generic interfaces.
|
||||
!
|
||||
module mod
|
||||
use iso_c_binding, only: c_int
|
||||
implicit none
|
||||
private
|
||||
public :: gen, c_int
|
||||
interface gen
|
||||
module procedure test
|
||||
end interface gen
|
||||
contains
|
||||
subroutine test(a) bind(c, name="myFunc")
|
||||
integer(c_int), intent(out) :: a
|
||||
a = 17
|
||||
end subroutine test
|
||||
end module mod
|
||||
|
||||
program main
|
||||
use mod
|
||||
implicit none
|
||||
integer(c_int) :: x
|
||||
x = -44
|
||||
call gen(x)
|
||||
if(x /= 17) call abort()
|
||||
end program main
|
Loading…
Reference in New Issue
Block a user