On Mon, 9 Sep 2013, Richard Biener wrote: > On Mon, 9 Sep 2013, Paolo Carlini wrote: > > > Hi Richard, > > > > On 09/09/2013 09:46 AM, Richard Biener wrote: > > > On Sun, 8 Sep 2013, Paolo Carlini wrote: > > > > > > > Hi, > > > > > > > > this patchlet fixes the column # of the unused parameter warnings > > > > emitted > > > > by > > > > do_warn_unused_parameter by explicitly passing DECL_SOURCE_LOCATION > > > > (decl) > > > > instead of wrongly relying on '+', which in this case ends up meaning > > > > the > > > > location of the function declaration. Tested x86_64-linux. > > > I would have expected %q+D to use the location of the corresponding > > > decl, not some random other location. So, isn't the bug in the > > > C++ frontend diagnostic machinery? > > Well, first notice that the patch fixes the issue *both* for the C and C++ > > front-ends, that's why I added the testcase to c-c++-common. This isn't a > > C++ > > issue. Then notice that we do already have tens of cases where we use > > DECL_SOURCE_LOCATION + %qD, when we want to be precise about the location. > > The > > diagnostic machinery has this mechanism using + which uses location_of, > > which > > is often useful for expressions, but which very often we don't use for > > decls. > > In fact, some people, like Manuel, see the audit trail of the bug, find the > > mechanism quite confusing. Is there something specific you want me to check? > > How is '+' in %q+D defined? I failed to find documentation of the > diagnostic formats (but only searched for like two minutes).
That said, grepping for %q+D reveals quite some uses and it looks like all of them expect the location being used to be that of the decl passed to the diagnostic call, not some random other location. Richard.