]> granicus.if.org Git - clang/commit
More hacking on mapDiagnosticRanges to make it handle more cases.
authorEli Friedman <eli.friedman@gmail.com>
Thu, 13 Dec 2012 00:14:59 +0000 (00:14 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 13 Dec 2012 00:14:59 +0000 (00:14 +0000)
commit0fdcd1e81db7b8f5b3fd05154d966b215b20a2eb
tree4b7a9d90748562d6ca13f0181466275da9eb88d0
parent3872b46ba9a5275ef0bf4fcefe2d7ef11ce75cc5
More hacking on mapDiagnosticRanges to make it handle more cases.
This still isn't quite right, but it fixes a crash.

I factored out findCommonParent because we need it on the result of
getImmediateExpansionRange: for a function macro, the beginning
and end of an expansion range can come out of different
macros/macro arguments, which means the resulting range is a complete
mess to handle consistently.

I also made some changes to how findCommonParent works; it works somewhat
better in some cases, and somewhat worse in others, but I think overall
it's a better balance.  I'm coming to the conclusion that mapDiagnosticRanges
isn't using the right algorithm, though: chasing the caret is fundamentally
more complicated than any algorithm which only considers one FileID for the
caret can handle because each SourceLocation doesn't really have a single parent.
We need to follow the same path of choosing expansion locations and spelling
locations which the caret used to come up with the correct range
in the general case.

Fixes <rdar://problem/12847524>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170049 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Frontend/DiagnosticRenderer.cpp
test/Misc/caret-diags-macros.c