[cfe-dev] EXTENSION for some diags
neil at daikokuya.co.uk
Sat Aug 25 22:15:31 PDT 2007
Chris Lattner wrote:-
> You're right, we do. What do you suggest? GCC has a class of
> extension warnings that are emitted by default. Is this what you
> mean? That would give us:
> 1. Error.
> 2. Warning always (eventually enabled or disabled by other -W options)
> 3. Extension, defaults to a warning
> 4. Extension, defaults to silent
> -pedantic would then map #4 to a warning. -pedantic-errors would
> make #3/#4 to error.
> Sound reasonable?
I implemented something like the following myself; I'm quite fond
of this approach and it's flexible:
a) Each diagnostic tag has a default severity suitable for normal
compiles. Severities are, in order, suppress, remark, warning,
soft error, hard error, fatal and maybe ice.
b) User can change the severity of any diagnostic with default
severity <= soft error to any severity <= soft error, either
via #pragma or on the command line.
c) In C90 and C99 pedantic mode, a table of tags that must
be diagnosed according to the standard is scanned and the
severity of said tag "upgraded" to warning (-pedantic or
equivalent) or error (-pedantic-errors or equivalent) if it
d) Some severities need to be different depending on compile-
time context anyway (e.g. integer division by zero is a
run-time error, compile-time warning except in constant
expressions where it is compile-time error). So when
raising a diagnostic it should be possible for the front
end to specify a severity override anyway.
You probably feel something slightly different is appropriate
for LLVM, but there may be ideas worth using here. It avoids
the need for duplicate tags too, which is good from a user-
interface point of view if they are exposed to the user (they
probably should be for the fine-grained control of b)).
Something I've not implemented yet is diagnostic groups, so
you could give groups of tags a name and manipulate them
en-masse, e.g. portability warnings, unused warnings, etc.
More information about the cfe-dev