On Tue, 25 Mar 2014, Jakub Jelinek wrote: > On Tue, Mar 25, 2014 at 03:35:29PM +0100, Richard Biener wrote: > > The following implements a special-case for LTO when doing %K > > formatting. LTO currently only keeps FUNCTION_DECL abstract > > origins (for BLOCKs satisfying inlined_function_outer_scope_p) > > which means the existing %K formatting usually bails out immediately. > > This severely complicates the search for warnings like > > > > /usr/include/bits/stdio2.h: In function ‘main’: > > /usr/include/bits/stdio2.h:293:2: warning: call to ‘__fread_chk_warn’ > > declared with attribute warning: fread called with bigger size * nmemb > > than length of destination buffer > > return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream); > > ^ > > > > because you only have an outermost function context to work on > > and the inline stack can include functions from any translation > > unit with LTO. The following patch improves this to > > > > In function 'fread', > > inlined from 'main' at t.c:7:10: > > /usr/include/bits/stdio2.h:293:2: warning: call to '__fread_chk_warn' > > declared with attribute warning: fread called with bigger size * nmemb > > than length of destination buffer > > return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream); > > ^ > > > > which matches non-LTO behavior. > > > > Bootstrap/regtest pending on x86_64-unknown-linux-gnu, ok for trunk? > > If it works, ok. I'd of course prefer if it preserved the abstract origins > properly, otherwise it can't emit proper debug info. But for now it is fine > I guess.
Yeah, but we'd ICE here because the abstract BLOCKs cannot be partitioned, etc. properly. The debug info "works" at least for the purpose of handling inlines. Richard.