> Hello, > > This follows up an earler e-mail where I wrote: > > Should this be called symtab_complaint(), or perhaphs, should complaint() take an extra parameter (the complaint class) so that other code can use this mechanism? > > I've implemented this. In the process I've tried to make the code a little bit more i18n friendly (it was assuming that things read left to right). > > Anyway, this is my original description: > > The files complaints.[hc] implement a mechanism for supressing warning messages that occure more than a small number of times. GDB's debug readers use this mechanism to supress all but the first few warnings generated when reading an object file. > > The current implementation stores the warning message string in a structure vis: > > struct complaint argument_complaint = { "Argument '%d'", }; > > DOUBLEST argument; > complain (&argument_complaint, "argument"); > complain (&argument_complaint, argument); > complain (&argument_complaint, &argument); > > The problem I see with this is that there is nothing (other than the human eye) checking for consistency between the format string and the call. > > I'd like to propose a new complaints interface: > > void complaint (const char *fmt, ...); > > (with a format printf attribute) so that the compiler (GCC with -Wformat) can check, at build time, the consistency of the format string and its parameter list. To issue the same complaint from multiple points in the code, a wrapper function can be used: > > argument_complaint (int argument) > { > complaint ("Argument '%d'", argument); > } > > The process of updating the above should flush out a few bugs :-) > > This change would help eliminate problems such as: > http://sources.redhat.com/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gdb&pr=211 > > -- > > I don't use the most efficient of algorithms when detecting duplicate complaints. But then, I don't know how often complaints are occuring and my objective is to fix the format miss-match. > > The complaint() interface should probably be documented along with error() and warning(). > > -- > > thoughts? > Andrew I've checked the attached in. It's slightly different to the original in that: - it includes internal_complaint() to match intenal_error() and internal_warning() - complain() simply re-calls complaint() with the message Thanks to Kevin for giving it the once over. Attached is the final patch, Andrew