diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2021-04-08 17:01:15 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2021-04-09 10:09:07 +0200 |
commit | 422c939f44eec82aca1060d22ea9a95a44d6b17d (patch) | |
tree | 9ca0cfb823bb20a373e2af80afef5e2ef5490f80 /compilerplugins/clang/pluginhandler.cxx | |
parent | 200626e41f004b6b8588f89fa3707c71ae2b375c (diff) |
make clang plugin check code in headers only once if in PCH
When using Clang PCHs, we know for certain that the content of a PCH
will be used once by the PCH's dedicated source file. So it is not
necessary to let clang plugin check locations coming from a PCH
every time, but just once when compiling that dedicated source.
For starmath's parse.cxx this reduces compilation time 0.94s->0.4s
(0.1s when not using plugins at all), for sc's document.cxx it is
5.9s->5.0s (4.0s without plugins). For reference, without PCHs
the numbers are (with/without plugins) 2.1s/1.9s for parse.cxx
and 11.2s/10.3s for document.cxx.
Change-Id: Ie39787e65d7951187941dcff4899d053da63cbdd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113817
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'compilerplugins/clang/pluginhandler.cxx')
-rw-r--r-- | compilerplugins/clang/pluginhandler.cxx | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compilerplugins/clang/pluginhandler.cxx b/compilerplugins/clang/pluginhandler.cxx index 54dba3e3bcc0..622caf917b8e 100644 --- a/compilerplugins/clang/pluginhandler.cxx +++ b/compilerplugins/clang/pluginhandler.cxx @@ -231,6 +231,19 @@ bool PluginHandler::ignoreLocation(SourceLocation loc) { bool PluginHandler::checkIgnoreLocation(SourceLocation loc) { +#if HAVE_BUILDING_PCH_WITH_OBJ + // If we're building a separate precompiled_foo.cxx file + // for a PCH, then it is not necessary to check contents of everything + // included by the PCH in every compilation, check only once for that + // precompiled_foo.cxx file. + if( !compiler.getSourceManager().isLocalSourceLocation( loc )) + { + if( !compiler.getLangOpts().BuildingPCHWithObjectFile ) + return true; + } +#elif CLANG_VERSION >= 110000 +#error Internal error, -building-pch-with-obj support not detected in Clang. +#endif SourceLocation expansionLoc = compiler.getSourceManager().getExpansionLoc( loc ); if( compiler.getSourceManager().isInSystemHeader( expansionLoc )) return true; |