| File src/Finder.cpp changed (mode: 100644) (index ebec09e..f8f7ebb) |
| ... |
... |
public: |
| 47 |
47 |
private: |
private: |
| 48 |
48 |
Funcs::iterator registerFunc(const FunctionDecl &func, |
Funcs::iterator registerFunc(const FunctionDecl &func, |
| 49 |
49 |
const SourceManager &sm) const; |
const SourceManager &sm) const; |
| 50 |
|
void registerRef(const DeclRefExpr &ref, |
|
| 51 |
|
const SourceManager &sm) const; |
|
|
50 |
|
void registerRef(const DeclRefExpr &ref, const SourceManager &sm) const; |
| 52 |
51 |
|
|
| 53 |
52 |
Funcs &funcs; |
Funcs &funcs; |
| 54 |
53 |
}; |
}; |
| 55 |
54 |
|
|
| 56 |
|
MatchHelper::MatchHelper(Funcs &funcs) |
|
| 57 |
|
: funcs(funcs) {} |
|
|
55 |
|
MatchHelper::MatchHelper(Funcs &funcs) : funcs(funcs) {} |
| 58 |
56 |
|
|
| 59 |
57 |
void MatchHelper::run(const Result &result) { |
void MatchHelper::run(const Result &result) { |
| 60 |
58 |
using Func = FunctionDecl; |
using Func = FunctionDecl; |
| |
| ... |
... |
void MatchHelper::registerRef(const DeclRefExpr &ref, |
| 93 |
91 |
} |
} |
| 94 |
92 |
} |
} |
| 95 |
93 |
|
|
| 96 |
|
} // namespace |
|
|
94 |
|
} // namespace |
| 97 |
95 |
|
|
| 98 |
96 |
class Finder::Impl { |
class Finder::Impl { |
| 99 |
97 |
public: |
public: |
| |
| ... |
... |
Finder::Impl::Impl() : helper(funcs) { |
| 116 |
114 |
} |
} |
| 117 |
115 |
|
|
| 118 |
116 |
Finder::Impl::~Impl() { |
Finder::Impl::~Impl() { |
| 119 |
|
for (auto & func : funcs) { |
|
|
117 |
|
for (auto &func : funcs) { |
| 120 |
118 |
const auto &funcInfo = func.second; |
const auto &funcInfo = func.second; |
| 121 |
119 |
|
|
| 122 |
120 |
if (funcInfo.isFullyDeclared()) { |
if (funcInfo.isFullyDeclared()) { |
| File src/FuncInfo.cpp changed (mode: 100644) (index 52c6596..e5a9a53) |
| ... |
... |
void FuncInfo::registerRef(const clang::DeclRefExpr &ref, |
| 52 |
52 |
bool FuncInfo::isUnused() const { return calls.empty(); } |
bool FuncInfo::isUnused() const { return calls.empty(); } |
| 53 |
53 |
|
|
| 54 |
54 |
bool FuncInfo::canBeMadeStatic() const { |
bool FuncInfo::canBeMadeStatic() const { |
| 55 |
|
for (const auto & call : calls) { |
|
|
55 |
|
for (const auto &call : calls) { |
| 56 |
56 |
if (!call.isInThisUnit(fileName)) { |
if (!call.isInThisUnit(fileName)) { |
| 57 |
57 |
return false; |
return false; |
| 58 |
58 |
} |
} |
| File src/FuncInfo.hpp changed (mode: 100644) (index 22e1c3c..ada220e) |
| 28 |
28 |
|
|
| 29 |
29 |
#include "RefInfo.hpp" |
#include "RefInfo.hpp" |
| 30 |
30 |
|
|
| 31 |
|
|
|
| 32 |
31 |
namespace clang { |
namespace clang { |
| 33 |
32 |
class FunctionDecl; |
class FunctionDecl; |
| 34 |
33 |
class DeclRefExpr; |
class DeclRefExpr; |
| 35 |
34 |
class SourceManager; |
class SourceManager; |
| 36 |
35 |
} // namespace clang |
} // namespace clang |
| 37 |
36 |
|
|
| 38 |
|
|
|
| 39 |
37 |
class FuncInfo { |
class FuncInfo { |
| 40 |
|
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const FuncInfo &fi); |
|
|
38 |
|
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &os, |
|
39 |
|
const FuncInfo &fi); |
| 41 |
40 |
|
|
| 42 |
41 |
public: |
public: |
| 43 |
42 |
FuncInfo(const clang::FunctionDecl &func, const clang::SourceManager &sm); |
FuncInfo(const clang::FunctionDecl &func, const clang::SourceManager &sm); |
| |
| ... |
... |
public: |
| 53 |
52 |
private: |
private: |
| 54 |
53 |
const std::string name; |
const std::string name; |
| 55 |
54 |
std::string fileName; |
std::string fileName; |
| 56 |
|
unsigned int lineNum {0}; |
|
|
55 |
|
unsigned int lineNum{0}; |
| 57 |
56 |
typedef std::vector<RefInfo> Refs; |
typedef std::vector<RefInfo> Refs; |
| 58 |
57 |
Refs calls; |
Refs calls; |
| 59 |
58 |
}; |
}; |
| File src/RefInfo.cpp changed (mode: 100644) (index 1d1e2e2..985c3db) |
| 24 |
24 |
#include <clang/Basic/SourceLocation.h> |
#include <clang/Basic/SourceLocation.h> |
| 25 |
25 |
#include <clang/Basic/SourceManager.h> |
#include <clang/Basic/SourceManager.h> |
| 26 |
26 |
|
|
| 27 |
|
|
|
| 28 |
27 |
namespace { |
namespace { |
| 29 |
28 |
std::string getFilename(const clang::DeclRefExpr &ref, |
std::string getFilename(const clang::DeclRefExpr &ref, |
| 30 |
29 |
const clang::SourceManager &sm) { |
const clang::SourceManager &sm) { |
| 31 |
|
clang::FullSourceLoc fullLoc(ref.getExprLoc(), sm); |
|
| 32 |
|
return sm.getFilename(fullLoc); |
|
|
30 |
|
clang::FullSourceLoc fullLoc(ref.getExprLoc(), sm); |
|
31 |
|
return sm.getFilename(fullLoc); |
| 33 |
32 |
} |
} |
| 34 |
|
} // namespace |
|
| 35 |
|
|
|
|
33 |
|
} // namespace |
| 36 |
34 |
|
|
| 37 |
|
RefInfo::RefInfo(const clang::DeclRefExpr &ref, |
|
| 38 |
|
const clang::SourceManager &sm) |
|
| 39 |
|
: fileName(getFilename(ref, sm)) { |
|
| 40 |
|
} |
|
|
35 |
|
RefInfo::RefInfo(const clang::DeclRefExpr &ref, const clang::SourceManager &sm) |
|
36 |
|
: fileName(getFilename(ref, sm)) {} |
| 41 |
37 |
|
|
| 42 |
38 |
bool RefInfo::isInThisUnit(const std::string &other) const { |
bool RefInfo::isInThisUnit(const std::string &other) const { |
| 43 |
39 |
return other == fileName; |
return other == fileName; |
| File src/unused-funcs.cpp changed (mode: 100644) (index 8fe71b0..03d9228) |
| 30 |
30 |
namespace ct = clang::tooling; |
namespace ct = clang::tooling; |
| 31 |
31 |
|
|
| 32 |
32 |
namespace { |
namespace { |
| 33 |
|
class CustomDiagnosticConsumer: public clang::DiagnosticConsumer { |
|
| 34 |
|
public: |
|
| 35 |
|
bool IncludeInDiagnosticCounts() const override { return false; } |
|
| 36 |
|
}; |
|
| 37 |
|
} // namespace |
|
|
33 |
|
class CustomDiagnosticConsumer : public clang::DiagnosticConsumer { |
|
34 |
|
public: |
|
35 |
|
bool IncludeInDiagnosticCounts() const override { return false; } |
|
36 |
|
}; |
|
37 |
|
} // namespace |
| 38 |
38 |
|
|
| 39 |
39 |
static llvm::cl::extrahelp commonHelp(ct::CommonOptionsParser::HelpMessage); |
static llvm::cl::extrahelp commonHelp(ct::CommonOptionsParser::HelpMessage); |
| 40 |
40 |
|
|