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