On Mon, 9 Sep 2013, Paolo Carlini wrote: > On 09/09/2013 12:04 PM, Richard Biener wrote: > > On Mon, 9 Sep 2013, Jakub Jelinek wrote: > > > > > On Mon, Sep 09, 2013 at 11:45:08AM +0200, Richard Biener wrote: > > > > Well, in this case the patch should IMHO be a no-op. > > > > > > > > - warning (OPT_Wunused_parameter, "unused parameter %q+D", decl); > > > > + warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wunused_parameter, > > > > + "unused parameter %qD", decl); > > > > > > > > no? Unless I misunderstand what %q+D should do. > > > The question is how exactly is %q+D defined, if it is > > > warning_at (location_of (decl), OPT_Wunused_parameter, "unused parameter > > > %qD", decl); in this case, or > > > DECL_SOURCE_LOCATION (decl) instead. > > It can't be 'location_of' because that's a C++ FE speciality but > > warning_at and %q+D are diagnostic machinery level. > Everything happens via call backs. Thus from the generic diagnostic machinery, > you go to cp_printer for C++, thus location_of for C++. In C is different, but > again there is, evidently, a mechanism which uses DECL_CONTEXT for PARM_DECLs > which leads to an inaccurate location when we *really* want the location of > the parameter (exactly as I explained for C++).
I understand that. But I question it. Why would that ever be useful? Can't the places that want that simply use warning/error_at with the proper location? Richard.