http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56231
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> 2013-02-08 10:10:14 UTC --- Testcase: t.c: ---- volatile int b; int foo (int *); int main () { int a; b = foo (&a); return 0; } t2.c: ----- int foo (int *a) { return *a; } > gcc t.c t2.c -O -Wuninitialized In file included from t.c:1:0, from :2: t.c: In function 'main': t.c:6:5: warning: 'a' is used uninitialized in this function [-Wuninitialized] b = foo (&a); ^ In file included from t.c:1:0, from :2: t.c:5:7: note: 'a' was declared here int a; ^ with the last proposed change: > gcc t.c t2.c -O -Wuninitialized In file included from t.c:1:0: t.c: In function 'main': t.c:6:5: warning: 'a' is used uninitialized in this function [-Wuninitialized] b = foo (&a); ^ In file included from t.c:1:0: t.c:5:7: note: 'a' was declared here int a; ^ that's still odd (the included from thing), but slightly better. I suppose with LC_LEAVE/LC_ENTER on each file change we see we mess up the include stack completely anyway. So the question is if we can suppress printing of the include stack completely from within LTO? I don't see how we can possibly save the stack without great cost, as we basically stream locations in random order. The only way to preserve it is to be able to re-construct (at compile-time where we still have a single TU) the order in which locations were generated and stream that info so we can replicate location construction in exactly the same way (though we might not stream all location transitions). But I suppose it's not worth all the trouble - the include stack is only used for late diagnostics. So - how do we "enter" a toplevel file correctly? It seems that In file included from t.c:1:0: t.c:5:7: note: 'a' was declared here int a; ^ is because of the LC_ENTER? Should we simply not bother about LC_ENTER/LEAVE at all?