summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/store
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2014-12-04 13:38:53 +0200
committerNoel Grandin <noel@peralex.com>2014-12-04 13:38:53 +0200
commitc20a0120d8b79346179e6599931108081bd5a49c (patch)
tree0e753febd24ef2762a4717a5eb44410a9d2bcfbe /compilerplugins/clang/store
parent16d0e0b8077de0cb67e312b1b7397fd8ab7d03d8 (diff)
move the cstylecast clang plugin out of /store
Change-Id: Iee78bd688ddb3e02deb1a3636d6a604838e97b09
Diffstat (limited to 'compilerplugins/clang/store')
-rw-r--r--compilerplugins/clang/store/cstylecast.cxx103
1 files changed, 0 insertions, 103 deletions
diff --git a/compilerplugins/clang/store/cstylecast.cxx b/compilerplugins/clang/store/cstylecast.cxx
deleted file mode 100644
index 132686f84797..000000000000
--- a/compilerplugins/clang/store/cstylecast.cxx
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <string>
-#include "plugin.hxx"
-#include "compat.hxx"
-
-//
-// We don't like using C-style casts in C++ code
-//
-
-namespace {
-
-class CStyleCast:
- public RecursiveASTVisitor<CStyleCast>, public loplugin::Plugin
-{
-public:
- explicit CStyleCast(InstantiationData const & data): Plugin(data) {}
-
- virtual void run() override {
- if (compiler.getLangOpts().CPlusPlus) {
- TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
- }
- }
-
- bool VisitCStyleCastExpr(const CStyleCastExpr * expr);
-};
-
-static const char * recommendedFix(clang::CastKind ck) {
- switch(ck) {
- case CK_IntegralToPointer: return "reinterpret_cast";
- case CK_PointerToIntegral: return "reinterpret_cast";
- case CK_BaseToDerived: return "static_cast";
- default: return "???";
- }
-}
-
-bool CStyleCast::VisitCStyleCastExpr(const CStyleCastExpr * expr) {
- if (ignoreLocation(expr)) {
- return true;
- }
- // casting to void is typically used when a parameter or field is only used in
- // debug mode, and we want to eliminate an "unused" warning
- if( expr->getCastKind() == CK_ToVoid ) {
- return true;
- }
- // ignore integral-type conversions for now, there is unsufficient agreement about
- // the merits of C++ style casting in this case
- if( expr->getCastKind() == CK_IntegralCast ) {
- return true;
- }
- if( expr->getCastKind() == CK_NoOp ) {
- return true;
- }
- // ignore pointer-type conversions for now
- if( expr->getCastKind() == CK_BitCast ) {
- return true;
- }
- // ignore stuff from inside templates for now
- if( expr->getCastKind() == CK_Dependent ) {
- return true;
- }
- SourceLocation spellingLocation = compiler.getSourceManager().getSpellingLoc(
- expr->getLocStart());
- StringRef filename = compiler.getSourceManager().getFilename(spellingLocation);
- // ignore C code
- if ( filename.endswith(".h") ) {
- return true;
- }
- if ( compat::isInMainFile(compiler.getSourceManager(), spellingLocation) ) {
- if (filename.startswith(SRCDIR "/sal") // sal has tons of weird stuff going on that I don't understand enough to fix
- || filename.startswith(SRCDIR "/bridges")) { // I'm not messing with this code - far too dangerous
- return true;
- }
- } else {
- if (filename.startswith(SRCDIR "/include/tools/solar.h")
- || filename.startswith(SRCDIR "/include/cppuhelper/")) {
- return true;
- }
- }
- report(
- DiagnosticsEngine::Warning,
- "c-style cast, type=%0, from=%1, to=%2, recommendedFix=%3",
- expr->getSourceRange().getBegin())
- << expr->getCastKind()
- << expr->getSubExprAsWritten()->getType()
- << expr->getType()
- << recommendedFix(expr->getCastKind())
- << expr->getSourceRange();
- return true;
-}
-
-loplugin::Plugin::Registration< CStyleCast > X("cstylecast");
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */