On Mon, May 18, 2020 at 06:38:17PM -0700, Linus Torvalds wrote: > On Mon, May 18, 2020 at 5:57 PM Luc Van Oostenryck > <luc.vanoostenryck@xxxxxxxxx> wrote: > > > > So, mainly in preparation for some incoming changes, let > > function_scope's parent be NULL instead of the builtin scope. > > Hmm. Gcc nested functions? > > Sparse doesn't _support_ them, but the symbol nesting part actually > does work, afaik. This looks like it might break it. Hmm yes. I was barely aware that nested functions were at least parsed but I had absolutely not internalized that and indeed this patch assumes that leaving the function will return to the file scope. But well this patch maybe made some sense at some stage but was probably a bad idea, even more so with the nested functions. So I'm dropping it and making the corresponding adjustments in the next 2 patches. Thank you for noticing this. > Yes, gcc function nesting is disgusting. But it's a thing. > > Stupid test-case that almost works with sparse: > > int test(int a, int b) > { > inline int nested(int i) > { > return a*2 + i; > } > return nested(b); > } > > and by "almost works with sparse" I mean that it actually linearizes > correctly, even if it's mostly by mistake, and you get a warning about > > t.c:5:24: warning: unreplaced symbol 'a' > > because sparse really doesn't support nested functions and it really > only works because of inlining. I see, interesting. I only saw this "unreplaced symbol" message a very few tmes and never understood its cause (I don't think it was related to a nested function but it makes more sense now). -- Luc