Clang import
This commit is contained in:
parent
6beadd9eb9
commit
b6833b525f
|
@ -175,6 +175,9 @@ void CheckLeakAutoVar::doubleFreeError(const Token *tok, const Token *prevFreeTo
|
||||||
|
|
||||||
void CheckLeakAutoVar::check()
|
void CheckLeakAutoVar::check()
|
||||||
{
|
{
|
||||||
|
if (mSettings->clang)
|
||||||
|
return;
|
||||||
|
|
||||||
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
|
|
||||||
// Local variables that are known to be non-zero.
|
// Local variables that are known to be non-zero.
|
||||||
|
|
|
@ -759,6 +759,9 @@ void CheckMemoryLeakInClass::publicAllocationError(const Token *tok, const std::
|
||||||
|
|
||||||
void CheckMemoryLeakStructMember::check()
|
void CheckMemoryLeakStructMember::check()
|
||||||
{
|
{
|
||||||
|
if (mSettings->clang)
|
||||||
|
return;
|
||||||
|
|
||||||
const SymbolDatabase* symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase* symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
for (const Variable* var : symbolDatabase->variableList()) {
|
for (const Variable* var : symbolDatabase->variableList()) {
|
||||||
if (!var || !var->isLocal() || var->isStatic() || var->isReference())
|
if (!var || !var->isLocal() || var->isStatic() || var->isReference())
|
||||||
|
|
|
@ -866,6 +866,9 @@ void CheckOther::unreachableCodeError(const Token *tok, bool inconclusive)
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
void CheckOther::checkVariableScope()
|
void CheckOther::checkVariableScope()
|
||||||
{
|
{
|
||||||
|
if (mSettings->clang)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!mSettings->isEnabled(Settings::STYLE))
|
if (!mSettings->isEnabled(Settings::STYLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,9 @@ public:
|
||||||
|
|
||||||
/** @brief Run checks against the normal token list */
|
/** @brief Run checks against the normal token list */
|
||||||
void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) OVERRIDE {
|
void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) OVERRIDE {
|
||||||
|
if (settings->clang)
|
||||||
|
return;
|
||||||
|
|
||||||
CheckUninitVar checkUninitVar(tokenizer, settings, errorLogger);
|
CheckUninitVar checkUninitVar(tokenizer, settings, errorLogger);
|
||||||
checkUninitVar.check();
|
checkUninitVar.check();
|
||||||
checkUninitVar.valueFlowUninit();
|
checkUninitVar.valueFlowUninit();
|
||||||
|
|
|
@ -1091,6 +1091,9 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
||||||
if (!mSettings->isEnabled(Settings::STYLE))
|
if (!mSettings->isEnabled(Settings::STYLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (mSettings->clang)
|
||||||
|
return;
|
||||||
|
|
||||||
// Parse all executing scopes..
|
// Parse all executing scopes..
|
||||||
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,8 @@ void CheckVaarg::referenceAs_va_start_error(const Token *tok, const std::string&
|
||||||
|
|
||||||
void CheckVaarg::va_list_usage()
|
void CheckVaarg::va_list_usage()
|
||||||
{
|
{
|
||||||
|
if (mSettings->clang)
|
||||||
|
return;
|
||||||
const SymbolDatabase* const symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase* const symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
for (const Variable* var : symbolDatabase->variableList()) {
|
for (const Variable* var : symbolDatabase->variableList()) {
|
||||||
if (!var || var->isPointer() || var->isReference() || var->isArray() || !var->scope() || var->typeStartToken()->str() != "va_list")
|
if (!var || var->isPointer() || var->isReference() || var->isArray() || !var->scope() || var->typeStartToken()->str() != "va_list")
|
||||||
|
|
|
@ -1030,7 +1030,6 @@ void clangimport::AstNode::createTokensFunctionDecl(TokenList *tokenList)
|
||||||
Scope *nestedIn = const_cast<Scope *>(nameToken->scope());
|
Scope *nestedIn = const_cast<Scope *>(nameToken->scope());
|
||||||
symbolDatabase->scopeList.push_back(Scope(nullptr, nullptr, nestedIn));
|
symbolDatabase->scopeList.push_back(Scope(nullptr, nullptr, nestedIn));
|
||||||
Scope &scope = symbolDatabase->scopeList.back();
|
Scope &scope = symbolDatabase->scopeList.back();
|
||||||
symbolDatabase->functionScopes.push_back(&scope);
|
|
||||||
nestedIn->functionList.push_back(Function(nameToken));
|
nestedIn->functionList.push_back(Function(nameToken));
|
||||||
scope.function = &nestedIn->functionList.back();
|
scope.function = &nestedIn->functionList.back();
|
||||||
scope.type = Scope::ScopeType::eFunction;
|
scope.type = Scope::ScopeType::eFunction;
|
||||||
|
@ -1060,6 +1059,7 @@ void clangimport::AstNode::createTokensFunctionDecl(TokenList *tokenList)
|
||||||
par2->link(par1);
|
par2->link(par1);
|
||||||
// Function body
|
// Function body
|
||||||
if (mFile == 0 && !children.empty() && children.back()->nodeType == CompoundStmt) {
|
if (mFile == 0 && !children.empty() && children.back()->nodeType == CompoundStmt) {
|
||||||
|
symbolDatabase->functionScopes.push_back(&scope);
|
||||||
Token *bodyStart = addtoken(tokenList, "{");
|
Token *bodyStart = addtoken(tokenList, "{");
|
||||||
bodyStart->scope(&scope);
|
bodyStart->scope(&scope);
|
||||||
children.back()->createTokens(tokenList);
|
children.back()->createTokens(tokenList);
|
||||||
|
|
|
@ -890,6 +890,10 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer)
|
||||||
check->runChecks(&tokenizer, &mSettings, this);
|
check->runChecks(&tokenizer, &mSettings, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mSettings.clang)
|
||||||
|
// TODO: Use CTU for Clang analysis
|
||||||
|
return;
|
||||||
|
|
||||||
// Analyse the tokens..
|
// Analyse the tokens..
|
||||||
|
|
||||||
CTU::FileInfo *fi1 = CTU::getFileInfo(&tokenizer);
|
CTU::FileInfo *fi1 = CTU::getFileInfo(&tokenizer);
|
||||||
|
|
|
@ -888,8 +888,9 @@ private:
|
||||||
|
|
||||||
void symbolDatabaseFunction1() {
|
void symbolDatabaseFunction1() {
|
||||||
const char clang[] = "|-FunctionDecl 0x3aea7a0 <1.cpp:2:1, col:22> col:6 used foo 'void (int, int)'\n"
|
const char clang[] = "|-FunctionDecl 0x3aea7a0 <1.cpp:2:1, col:22> col:6 used foo 'void (int, int)'\n"
|
||||||
"| |-ParmVarDecl 0x3aea650 <col:10, col:14> col:14 x 'int'\n"
|
" |-ParmVarDecl 0x3aea650 <col:10, col:14> col:14 x 'int'\n"
|
||||||
"| `-ParmVarDecl 0x3aea6c8 <col:17, col:21> col:21 y 'int'\n";
|
" |-ParmVarDecl 0x3aea6c8 <col:17, col:21> col:21 y 'int'\n"
|
||||||
|
" `-CompoundStmt 0x3d45c48 <col:12>\n";
|
||||||
|
|
||||||
GET_SYMBOL_DB(clang);
|
GET_SYMBOL_DB(clang);
|
||||||
|
|
||||||
|
@ -907,7 +908,8 @@ private:
|
||||||
void symbolDatabaseFunction2() {
|
void symbolDatabaseFunction2() {
|
||||||
const char clang[] = "|-FunctionDecl 0x3aea7a0 <1.cpp:2:1, col:22> col:6 used foo 'void (int, int)'\n"
|
const char clang[] = "|-FunctionDecl 0x3aea7a0 <1.cpp:2:1, col:22> col:6 used foo 'void (int, int)'\n"
|
||||||
"| |-ParmVarDecl 0x3aea650 <col:10, col:14> col:14 'int'\n"
|
"| |-ParmVarDecl 0x3aea650 <col:10, col:14> col:14 'int'\n"
|
||||||
"| `-ParmVarDecl 0x3aea6c8 <col:17, col:21> col:21 'int'\n";
|
"| |-ParmVarDecl 0x3aea6c8 <col:17, col:21> col:21 'int'\n"
|
||||||
|
" `-CompoundStmt 0x3d45c48 <col:12>\n";
|
||||||
|
|
||||||
GET_SYMBOL_DB(clang);
|
GET_SYMBOL_DB(clang);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue