> > +class pass_musttail : public gimple_opt_pass > > +{ > > +public: > > + pass_musttail (gcc::context *ctxt) > > + : gimple_opt_pass (pass_data_musttail, ctxt) > > + {} > > + > > + /* opt_pass methods: */ > > + /* This pass is only used when not optimizing to make [[musttail]] still > > + work. */ > > + bool gate (function *) final override { return > > !flag_optimize_sibling_calls; } > > Shouldn't this check f->has_musttail only? That is, I would expect > -fno-optimize-sibling-calls to still tail-call [[musttail]]? The comment says > the pass only runs when not optimizing - so maybe you wanted to do > return optimize == 0;?
When flag_optimize_sibling_call is set the other tailcall pass will take care of the musttails. It is only needed when that one doesn't run. So I think looking at that flag is correct. But I should move the f->has_musttail check into the gate (done) and clarified the comment because it is not specific to optimizing. Thanks, -Andi