https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106124
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On Tue, 28 Mar 2023, jakub at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106124 > > --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- > (In reply to Richard Biener from comment #3) > > I suppose that's the OMP reduction function and that's always(?) inlined? > > The reduction "function" is something artificial which holds some expressions > for the > OpenMP reductions; we just need to attach those statements to some decl for > name lookup purposes. > The problem is what to do with lambdas defined inside of those expressions, or > e.g. nested functions for the C case: > int q; > > #pragma omp declare reduction (x : int : omp_out += omp_in + ({ int a = 1; > void > foo () { a++; } foo (); a; })) > > void bar (int *, int *); > > void > foo () > { > int r = 0, s = 0; > #pragma omp parallel reduction (x : r, s) > bar (&r, &s); > } > > ICEs too. Lambdas are there certainly valid, we try to pretend the artificial > functions don't really exist for the debug info purposes, but apparently not > sufficiently. Set DECL_IGNORED?