diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2019-10-29 22:53:33 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2019-10-30 07:14:17 +0100 |
commit | 1136ed6c5112018af08f8ac703070cc195389b40 (patch) | |
tree | 149b884147725a6df32e35301eb40e657121aa86 | |
parent | b5d8a5f830832f04d192f1351d8e523a2ef0042a (diff) |
Fix Plugin::containsPreprocessingConditionalInclusion
...which had been broken since dfc0dc4801707b2d8080af1540625b43bd463e17
"loplugin:casttovoid: fix containsPreprocessingConditionalInclusion()", and,
when range.getEnd() was a macro loc, would typically have wandered off past
the end of the intended range, until it would have encountered some #if etc.
and erroneously returned true. Fixed the fallout across the code base.
While at it, added a clarifying comment and made the "lexing fails" cases that
should never happen fail with a fatal error in debug mode.
Change-Id: Ieff44548384426d7716b6fc6c836c9069d878729
Reviewed-on: https://gerrit.libreoffice.org/81721
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | compilerplugins/clang/plugin.cxx | 26 | ||||
-rw-r--r-- | desktop/source/app/opencl.cxx | 3 | ||||
-rw-r--r-- | forms/source/solar/control/navtoolbar.cxx | 3 |
3 files changed, 23 insertions, 9 deletions
diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx index 6839fec0a836..01484bddc432 100644 --- a/compilerplugins/clang/plugin.cxx +++ b/compilerplugins/clang/plugin.cxx @@ -285,6 +285,8 @@ bool Plugin::isUnitTestMode() bool Plugin::containsPreprocessingConditionalInclusion(SourceRange range) { + // Preprocessing directives (other than _Pragma, which is not relevant here) cannot appear in + // macro expansions, so it is safe to just consider the range of expansion locations: auto const begin = compiler.getSourceManager().getExpansionLoc( range.getBegin()); auto const end = compiler.getSourceManager().getExpansionLoc( @@ -294,8 +296,15 @@ bool Plugin::containsPreprocessingConditionalInclusion(SourceRange range) || compiler.getSourceManager().isBeforeInTranslationUnit( begin, end))) { - // Conservatively assume "yes" if lexing fails (e.g., due to - // macros): + if (isDebugMode()) { + report( + DiagnosticsEngine::Fatal, + ("unexpected broken range for Plugin::containsPreprocessingConditionalInclusion," + " case 1"), + range.getBegin()) + << range; + } + // Conservatively assume "yes" if lexing fails: return true; } auto hash = false; @@ -305,8 +314,15 @@ bool Plugin::containsPreprocessingConditionalInclusion(SourceRange range) loc, tok, compiler.getSourceManager(), compiler.getLangOpts(), true)) { - // Conservatively assume "yes" if lexing fails (e.g., due to - // macros): + if (isDebugMode()) { + report( + DiagnosticsEngine::Fatal, + ("unexpected broken range for" + " Plugin::containsPreprocessingConditionalInclusion, case 2"), + loc) + << range; + } + // Conservatively assume "yes" if lexing fails: return true; } if (hash && tok.is(tok::raw_identifier)) { @@ -317,7 +333,7 @@ bool Plugin::containsPreprocessingConditionalInclusion(SourceRange range) return true; } } - if (loc == range.getEnd()) { + if (loc == end) { break; } hash = tok.is(tok::hash) && tok.isAtStartOfLine(); diff --git a/desktop/source/app/opencl.cxx b/desktop/source/app/opencl.cxx index 6edb7c077180..5ef73dd70cf9 100644 --- a/desktop/source/app/opencl.cxx +++ b/desktop/source/app/opencl.cxx @@ -209,8 +209,7 @@ void Desktop::CheckOpenCLCompute(const Reference< XDesktop2 > &xDesktop) } // Append our app version as well. - aSelectedCLDeviceVersionID += "--"; - aSelectedCLDeviceVersionID += LIBO_VERSION_DOTTED; + aSelectedCLDeviceVersionID += "--" LIBO_VERSION_DOTTED; // Append timestamp of the file. OUString aURL("$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/opencl/cl-test.ods"); diff --git a/forms/source/solar/control/navtoolbar.cxx b/forms/source/solar/control/navtoolbar.cxx index 2e8f82aff31d..a512c54a0793 100644 --- a/forms/source/solar/control/navtoolbar.cxx +++ b/forms/source/solar/control/navtoolbar.cxx @@ -57,8 +57,7 @@ namespace frm OUString getLabelString(const char* pResId) { - OUString sLabel( " " ); - sLabel += FRM_RES_STRING(pResId); + OUString sLabel( " " + FRM_RES_STRING(pResId) ); sLabel += " "; return sLabel; } |