On Mon, Aug 20, 2012 at 2:25 AM, Ludovic Courtès <ludo@xxxxxxx> wrote: > > Consider this function: > > static tree filter (bool (*pred) (const_tree), tree); > > static tree > list_remove (bool (*pred) (const_tree), tree t) > { > bool opposite (const_tree t) > { > return !pred (t); > } > > return filter (opposite, t); > } > > Here, the call to ‘filter’ is likely subject to tail-call optimization. > Is there any guarantee that ‘opposite’ is still reachable when ‘filter’ > is called? It would clearly be a bug for GCC to do a sibling call from list_remove to filter. I don't know whether GCC has that bug or not. If it does, please report it. Ian