On Fri, Nov 2, 2018 at 2:52 AM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > Anyway, I decided to do the merge by just getting rid of the > GCC_VERSION check around __no_sanitize_address_or_inline entirely. If > you enable KASAN, then a function with that marking just won't be > marked inline. I was a bit confused when reading the gcc bug reports, i.e. why gcc did *not* complain in 4.9 but it did in 5.1 (when it was supposed to complain also in 4.9). It turns out that gcc 5.1 takes into account who is the actual caller due to this change: + cgraph_node *caller = e->caller->global.inlined_to + ? e->caller->global.inlined_to : e->caller; ... - else if (!sanitize_attrs_match_for_inline_p (e->caller->decl, callee->decl)) + else if (!sanitize_attrs_match_for_inline_p (caller->decl, callee->decl)) change; e.g. this: #define really_inline inline __attribute__((always_inline)) #define no_sanitize __attribute__((no_sanitize_address)) really_inline void f() {} really_inline void g() { f(); } no_sanitize void h() { g(); } Complains in gcc 4.9 -O0, 5.1 -O0 and 5.1 -O2; but *not* in 4.9 -O2. https://godbolt.org/z/kNApqk Anyway, this is orthogonal but in case it clarifies that for someone else... > Miguel, please do double-check the merge (it's not pushed out yet, I'm > doing the usual build tests etc first). I was sleeping, didn't manage to see it (in your GitHub, I guess?). I did the merge myself, and arrived at the same thing as you. I quickly inspected the rest and seems fine. By the way, I spotted an extra space at: + * we do one or the other. Cheers, Miguel