Dear Janne, > the attached patch changes the binding labels that are needed for > bind(C) symbols to be heap allocated rather than, as currently, being > fixed size arrays of size 127 (or 64 in module.c!?).
wonder whether it would have been smarter to use string matching rather than the manual matching in gfc_match_name_C to obtain longer strings. (Cf. PR 36275. Different but related binding label issue: PR 38839.) On the other hand, that's separate issues, deserving patches on their own. > --- a/gcc/fortran/resolve.c > +++ b/gcc/fortran/resolve.c > @@ -2744,14 +2747,16 @@ gfc_iso_c_func_interface (gfc_symbol *sym, > { > /* two args. */ > sprintf (name, "%s_2", sym->name); > - sprintf (binding_label, "%s_2", sym->binding_label); > + if (sym->binding_label) > + sprintf (binding_label, "%s_2", sym->binding_label); > optional_arg = 1; I wonder whether one can get rid of all those binding names. I think they date back to the time when a libgfortran function was called for ISOCBINDING_ASSOCIATED instead of just generating in trans-intrinsics.c one (ptr != NULL) or two (ptr != NULL && ptr == tgt) pointer comparisons. I also believe that C_LOC and C_FUNLOC are (now) handled in trans-intrinsics.c. Thus, you could confirm that no binding name is needed and remove them. Otherwise, the patch looks relatively mechnical and is OK. Tobias