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>
PR fortran/34192
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;
{
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
{
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);
}
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
* gfortran.dg/nearest_2.f90: New.
--- /dev/null
+! { 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