r211005 - Hide the concept of diagnostic levels from lex, parse and sema
Alp Toker
alp at nuanti.com
Mon Jun 16 05:56:36 PDT 2014
On 16/06/2014 02:30, Alp Toker wrote:
> + /// \brief Determine whether the diagnostic is known to be ignored.
> + ///
> + /// This can be used to opportunistically avoid expensive checks when it's
> + /// known for certain that the diagnostic has been suppressed at the
> + /// specified location \p Loc.
> + ///
> + /// \param Loc The source location we are interested in finding out the
> + /// diagnostic state. Can be null in order to query the latest state.
> + bool isIgnored(unsigned DiagID, SourceLocation Loc) const {
> + return Diags->getDiagnosticLevel(DiagID, Loc, *this) ==
> + DiagnosticIDs::Ignored;
> + }
> +
A fun experiment to try at home following this commit:
Modify the isIgnored() function locally to return false, and then run
make check-clang. All tests should pass, but things are never that simple..
The ~20 failing tests highlight cases where warning flags have
introduced undesirable changes in semantic analysis, code generation or
otherwise influenced unrelated diagnostics. Now we have an ad-hoc way to
detect such problems.
I'll be filing bugs and fixing a few of these. Hopefully we can
correctly model isIgnored() as an opportunistic optimisation in time for
3.5 and eliminate side-effects introduced by -W.
Related PRs filed so far:
http://llvm.org/bugs/show_bug.cgi?id=20048
Alp.
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list