On Thu, Mar 12, 2020 at 11:24:06AM -0700, Linus Torvalds wrote: > On Thu, Mar 12, 2020 at 8:09 AM Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > > > When used on linux kernel, sparse issues a lot of "directive in macro's > > argument list" errors, "#if" within a macro invocation is widely used in > > the kernel code. > > Ack. Downgrading to a warning is a good thing anyway. > > I'd even be ok with making the default be "don't warn", and enable > warnings only if explicitly asked for, or perhaps with "pedantic" (not > that I think sparse cares about pedantic right now). *nod* > Yes, it's undefined behavior. But sparse does the right thing, and > it's the better thing to do. And it's not like we're necessarily > always particularly pedantic about some other cases. > > Now, the example where somebody _redefined_ a macro inside the macro > expansion, that's a different thing. That's just crazy. Maybe we could > make that "directive in macro argument list" thing be a more nuanced > flag? Yes, it's what I was thinking too. The #if*/#elif/#else/#endif should be perfectly safe here. A redefine is indeed crazy, same for a self-#undef IMO (even if its meaning is better defined and I think it would need a small change with sym->expansion), #include could make some sense but probably should be avoided too, like the other directives. -- Luc