gcc 7.3 diagnostic message descriptions
Manuel López-Ibáñez
lopezibanez@gmail.com
Sat Oct 13 23:38:00 GMT 2018
On top of what Jonathan already said, I would suggest the following:
On 11/10/18 13:20, David Gilbert wrote:
> I am working on a project in which I need to parse the gcc compiler
> diagnostics in order to automate the correction of the source code being
> compiled.
Any tool that wishes to automate code corrections based on diagnostics should
be built on top of -fdiagnostics-parseable-fixits and
-fdiagnostics-generate-patch options. That is what they are designed for.
If you are building a GUI, you can show humans the human-readable diagnostic
while parsing the output given by those options.
If the above is not enough, you can create a GCC plugin
https://gcc.gnu.org/wiki/plugins to dump diagnostics in some specific format
(JSON?). A good example of a plugin is the GCC Python Plugin:
https://gcc-python-plugin.readthedocs.io/en/latest/working-with-c.html#spell-checking-string-constants-within-source-code
Note that diagnostics have much more internal info (types, declarations, file
locations) than what is shown in a human-readable form, and you could add to
GCC the ability to print diagnostics in a machine-readable format that also
included all that extra info. A first attempt is here:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19165#c10
but nowadays, using JSON instead of XML is probably best.
Modifying GCC is easier than you may think:
https://gcc.gnu.org/wiki/GettingStarted#Basics:_Contributing_to_GCC_in_10_easy_steps
> . In some cases, the 'mark' line that follows an 'invalid
> conversion' diagnostic description identifies the object that generated the
> diagnostic with a '^' and a string of '~'s but in some cases the mark line
> only contains a caret that identifies the closing parenthesis of a function
> call or declaration and the column value in the diagnostic also points to
> this location. Why are there two behaviors?
In all cases where an automatic fix is possible, GCC should already produce a
correct location and a correct output of -fdiagnostics-parseable-fixits and
-fdiagnostics-generate-patch. Otherwise, it is either a bug or a pending
enhancement. Please report it: https://gcc.gnu.org/bugs/
> . In the case described in the first question above, I have found
> that the error:/warning: diagnostic is followed by a note: diagnostic that
> DOES identify the argument that provoked the diagnostic. Is this entirely
> consistent - i.e. will this 'note:' always be present?
If it is useful to have a note and the note is not there, please report a bug.
However, for your purposes, it will be even more useful to dump diagnostics in
a machine-readable format that can contain extra information about types,
declarations, file locations, etc.
> . What I am really trying to find is a comprehensive description of
> the gcc diagnostic message syntax. This is not in the documentation and
> does not appear to be on the web either. Can you point me at a source?
As Jonathan said, the default output is designed for humans, not machines. But
it does strive to be consistent and it does follow some guidelines:
https://gcc.gnu.org/wiki/DiagnosticsGuidelines
If you find inconsistencies, please report them as bugs.
Or maybe even better, go ahead, and fix them :)
https://gcc.gnu.org/wiki/GettingStarted#Basics:_Contributing_to_GCC_in_10_easy_steps
Cheers,
Manuel.
More information about the Gcc-help
mailing list