On Wed, Jul 29, 2015 at 02:04:12PM +0200, Richard Biener wrote: > On Wed, Jul 29, 2015 at 1:59 PM, Mikael Morin <mikael.mo...@sfr.fr> wrote: > > Le 29/07/2015 13:22, Richard Biener a écrit : > >> > >> On Wed, Jul 29, 2015 at 11:34 AM, Mikael Morin <mikael.mo...@sfr.fr> > >> wrote: > >>> > >>> Le 29/07/2015 10:26, Richard Biener a écrit : > >>>>>> > >>>>>> > >>>>>> Did you try using vec_safe_splice? > >>>> > >>>> > >>>> > >>>> That handles NULL retargs, not NULL or empty arglist. > >>>> > >>> I think retargs is NULL. > >> > >> > >> Not if the patch fixes anything. > >> > > The case retargs == NULL is the case arglen == 0, which means every vector > > pointer we are about to splice is NULL. > > So the patch fixes it. > > Ok, that wasn't obvious from reading the patch. >
This builds and passes regression testing on x86_64-*-freebsd. OP found the problem by running the sanatizers. I don't know how to build gcc with this as a build option. I'll commit whichever diff you recommend. Index: trans-expr.c =================================================================== --- trans-expr.c (revision 226328) +++ trans-expr.c (working copy) @@ -5921,18 +5921,18 @@ gfc_conv_procedure_call (gfc_se * se, gf vec_safe_reserve (retargs, arglen); /* Add the return arguments. */ - retargs->splice (arglist); + vec_safe_splice (retargs, arglist); /* Add the hidden present status for optional+value to the arguments. */ - retargs->splice (optionalargs); + vec_safe_splice (retargs, optionalargs); /* Add the hidden string length parameters to the arguments. */ - retargs->splice (stringargs); + vec_safe_splice (retargs, stringargs); /* We may want to append extra arguments here. This is used e.g. for calls to libgfortran_matmul_??, which need extra information. */ - if (!vec_safe_is_empty (append_args)) - retargs->splice (append_args); + vec_safe_splice (retargs, append_args); + arglist = retargs; /* Generate the actual call. */ -- Steve