On Tue, Jul 08, 2014 at 03:24:52PM -0400, Jason Merrill wrote: > I don't think we want to warn about e.g. 1-1, only about literal 0.
Well, at least literal 0 and '\0'. In any case, it seems both the C and C++ FEs fold the arguments too early, already during the parsing of the argument list. In the C FE, there is original_code in the c_expr struct, so perhaps I could somehow propagate it to the caller for the first few arguments and test that original_code is INTEGER_CST in addition to integer_zerop to check for literal 0. But in the C++ FE there isn't something like that. Do you think we shouldn't warn even if e.g. the last argument is a template parameter that turns out to be 0, so warn only during parsing and check for literal 0 and not warn again during instantiation? Any suggestions how to find out if it was literal 0 or something that folded to 0 in the C++ FE? Jakub