summaryrefslogtreecommitdiffstats
path: root/compilerplugins/clang/dyncastvisibility.cxx
Commit message (Collapse)AuthorAgeFilesLines
* better name for a function in compilerpluginsLuboš Luňák2019-10-081-1/+1
| | | | | | | | | The function is not just about a spelling location. Change-Id: I96e9e9ef7e27a9763397b4b86473c1c30d0e3eeb Reviewed-on: https://gerrit.libreoffice.org/80381 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
* fix various warnings in compilerpluginsLuboš Luňák2019-10-071-2/+2
| | | | | | | | | | | | | These are triggered when using llvm-config --cxxflags for building, and sometimes there's -Werror. The warnings were mostly unused variables because of being used only in assert(), or default case in switch that covers all enums (it's better to not handle default to get warning if a case is not handled). Change-Id: I0ecdd1f27390aadf033852b0d1ee0ca424ae3c37 Reviewed-on: https://gerrit.libreoffice.org/80317 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
* make (some) clang plugins share the same RecursiveASTVisitorLuboš Luňák2019-03-121-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Each plugin currently uses its own recursive AST run, which adds up. This patch adds another shared plugin which internally contains all (suitable) plugins and dispatches to them from the same one recursive run. This patch converts ~25 plugins and for starmath's accessibility.cxx reduces clang build time from 5.43s to 5.14s (and it's 4.39s without any plugins). As there are almost 50 more plugins to go, this can theoretically result in 4.56s final time, although probably not all plugins can be that easily converted, if at all. This mostly requires very little change in many plugins (see e.g. BadStatics), some even work without any functionality change (e.g. CharRightShift). Traverse* calls require some changes but are often not that difficult. WalkUp* probably can't be supported, although some plugins can(?) possibly be adjusted to not rely on them. And of course some plugins can be left as they are, using their own recursive run. See description at the top of generator.cxx for description of how to convert a plugin. The sharedvisitor.cxx source is generated based on scanning relevant plugin sources using a clang-based scanner/generator. The generated source is intentionally included instead of getting always generated, as the generating currently takes some time, so it should get updated in git whenever a change in a plugin triggers a source change in it. Change-Id: Ia0d2e3a5a464659503dbb4ed6c20b6cc89b4de01 Reviewed-on: https://gerrit.libreoffice.org/68026 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
* change some clang plugins to FilteringPluginsLuboš Luňák2019-03-111-2/+2
| | | | | | | | | | As far as I can tell these do not need to scan everything, so the filtering (and faster) base plugin is sufficient. Change-Id: I0912a730bb5ec9670d1faa5c83f573902118cc95 Reviewed-on: https://gerrit.libreoffice.org/68872 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
* compilerplugins: try to make these work with icecreamMichael Stahl2018-07-061-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | There are some problems here, this should fix one of them: the getFilename function returns "<stdin>" for spelling locations, because the input to clang is sort of preprocessed via -frewrite-includes if icecream is used and the file is built on a remote host (whereas it's apparently not preprocessed if the file is compiled locally by icecream). Using getPresumedLoc() uses the #line directives in the preprocessed input, which avoids the problem but is more expensive, so try to use it only when necessary. The getFileEntry(getMainFileID())->getName() pattern will also result in "<stdin>", but fortunately icecream passes -main-file-name, which oddly enough isn't used by the SourceManager's spelling locations, but is available separately via CodeGenOptions. This builds everything successfully with clang version 6.0.0: ICECC_PREFERRED_HOST=myremote make check gb_SUPPRESS_TESTS=t Change-Id: Ic121511683e5302d7b9d85186c8b9c4a5443fa1b Reviewed-on: https://gerrit.libreoffice.org/54993 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
* Improve loplugin:dyncastvisibility a bitStephan Bergmann2018-02-251-0/+38
| | | | | | | Change-Id: Iab9d333d08a8b90a69f3a096e5f39baf3e7bb638 Reviewed-on: https://gerrit.libreoffice.org/50279 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
* Clean away temporarily added using declarationsStephan Bergmann2017-11-071-1/+2
| | | | Change-Id: I26734c13515394162d88351a1cbe2b20abdac865
* Use unique class names for better FlameGraph resultsStephan Bergmann2017-10-111-4/+5
| | | | | | | | | | | ...of measuring loplugin performance, when gathering data with perf and all plugins that used "Visitor" as class name were lumped together. (Cf. <https://whatofhow.wordpress.com/2016/06/28/plugin-flamed/>.) Change-Id: Ie482f443faced7469528da4772e735bc2eda596d Reviewed-on: https://gerrit.libreoffice.org/43324 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Stephan Bergmann <sbergman@redhat.com>
* More clang::*Type vs. llvm::*Type ambiguitiesStephan Bergmann2017-09-111-2/+2
| | | | Change-Id: I21133976793ab018c633dda077029666308526db
* When traversing a TemplateDecl, ts can be a dependent typeStephan Bergmann2017-09-051-1/+3
| | | | Change-Id: I05b02ef807a12a802720f58cd5a2d6d370b42418
* New loplugin:dyncastvisibilityStephan Bergmann2017-09-041-0/+161
...to find uses of dynamic_cast where the static (base) type has hidden visibility while the dynamic (derived) one has default visibility, and which may thus fail at least on macOS like happened in d5ed3cd6dbd22bb18542778f1c48f4d5b3ae0f95 "Make WinMtfFontStyle's base class EMFIO_DLLPUBLIC, too". libcxxabi's __dynamic_cast takes static_type and dst_type arguments. Now, if dst_type (the derived type, with default visibility) is taken from .so A (and thus references the version of the base type info hidden in .so A) but the __dynamic_cast call is made from .so B, it passes for static_type the base type information hidden in .so B, and __dynamic_cast will consider the cast to fail. I'm not sure whether hidden intermediary types (in the hierarchy between the dynamic_cast's base and derived types) acutally cause a problem too, but lets flag them with the plugin anyway. The fixes use SAL_DLLPUBLIC_RTTI. For one, there appear to be no other reasons than type visibility to make those classes SAL_DLLPUBLIC. For another, this nicely avoids any actual changes on Windows (where SAL_DLLPUBLIC expands to nothing, and many of the affected classes were explicityl introduced into class hierarchies as "MSVC hacks"). Change-Id: Ia85a9635cebffb1009a9efc1484b8bd4025585d4 Reviewed-on: https://gerrit.libreoffice.org/41802 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>