* Fix #11717 Warn when C++ code is scanned as C (prevent FPs) * Don't throw for operators * Detect reference variables * Fix tests * Fix compilation * Fix test * Fix another test * Use strAt()
This commit is contained in:
parent
f72db74817
commit
ba57e15cb2
|
@ -4139,8 +4139,6 @@ static bool setVarIdParseDeclaration(Token** tok, const VariableMap& variableMap
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (Token::Match(tok2, "&|&&")) {
|
} else if (Token::Match(tok2, "&|&&")) {
|
||||||
if (c)
|
|
||||||
return false;
|
|
||||||
ref = !bracket;
|
ref = !bracket;
|
||||||
} else if (singleNameCount >= 1 && Token::Match(tok2, "( [*&]") && Token::Match(tok2->link(), ") (|[")) {
|
} else if (singleNameCount >= 1 && Token::Match(tok2, "( [*&]") && Token::Match(tok2->link(), ") (|[")) {
|
||||||
for (const Token* tok3 = tok2->tokAt(2); Token::Match(tok3, "!!)"); tok3 = tok3->next()) {
|
for (const Token* tok3 = tok2->tokAt(2); Token::Match(tok3, "!!)"); tok3 = tok3->next()) {
|
||||||
|
@ -4667,6 +4665,8 @@ void Tokenizer::setVarIdPass1()
|
||||||
decl = false;
|
decl = false;
|
||||||
|
|
||||||
if (decl) {
|
if (decl) {
|
||||||
|
if (isC() && Token::Match(prev2->previous(), "&|&&"))
|
||||||
|
syntaxErrorC(prev2, prev2->strAt(-2) + prev2->strAt(-1) + " " + prev2->str());
|
||||||
variableMap.addVariable(prev2->str(), scopeStack.size() <= 1);
|
variableMap.addVariable(prev2->str(), scopeStack.size() <= 1);
|
||||||
|
|
||||||
if (Token::simpleMatch(tok->previous(), "for (") && Token::Match(prev2, "%name% [=,]")) {
|
if (Token::simpleMatch(tok->previous(), "for (") && Token::Match(prev2, "%name% [=,]")) {
|
||||||
|
|
|
@ -368,8 +368,8 @@ private:
|
||||||
" char * &ref = p;\n"
|
" char * &ref = p;\n"
|
||||||
" p = malloc(10);\n"
|
" p = malloc(10);\n"
|
||||||
" free(ref);\n"
|
" free(ref);\n"
|
||||||
"}");
|
"}", /*cpp*/ true);
|
||||||
TODO_ASSERT_EQUALS("", "[test.c:6]: (error) Memory leak: p\n", errout.str());
|
TODO_ASSERT_EQUALS("", "[test.cpp:6]: (error) Memory leak: p\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void assign14() {
|
void assign14() {
|
||||||
|
@ -2329,7 +2329,7 @@ private:
|
||||||
void test1() { // 3809
|
void test1() { // 3809
|
||||||
check("void f(double*&p) {\n"
|
check("void f(double*&p) {\n"
|
||||||
" p = malloc(0x100);\n"
|
" p = malloc(0x100);\n"
|
||||||
"}");
|
"}", /*cpp*/ true);
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2345,7 +2345,7 @@ private:
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" char *&p = x();\n"
|
" char *&p = x();\n"
|
||||||
" p = malloc(10);\n"
|
" p = malloc(10);\n"
|
||||||
"};");
|
"};", /*cpp*/ true);
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4788,15 +4788,6 @@ private:
|
||||||
" *x = 0;\n"
|
" *x = 0;\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
functionVariableUsage("void foo(Foo &foo)\n"
|
|
||||||
"{\n"
|
|
||||||
" Foo &ref = foo;\n"
|
|
||||||
" int *x = &ref.x;\n"
|
|
||||||
" *x = 0;\n"
|
|
||||||
"}",
|
|
||||||
"test.c");
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void localvaralias11() { // #4423 - iterator
|
void localvaralias11() { // #4423 - iterator
|
||||||
|
|
|
@ -897,14 +897,12 @@ private:
|
||||||
const char code1[] = "union evt; void f(const evt & event);";
|
const char code1[] = "union evt; void f(const evt & event);";
|
||||||
ASSERT_EQUALS("1: union evt ; void f ( const evt & event@1 ) ;\n",
|
ASSERT_EQUALS("1: union evt ; void f ( const evt & event@1 ) ;\n",
|
||||||
tokenize(code1));
|
tokenize(code1));
|
||||||
ASSERT_EQUALS("1: union evt ; void f ( const evt & event ) ;\n",
|
ASSERT_THROW(tokenize(code1, "test.c"), InternalError);
|
||||||
tokenize(code1, "test.c"));
|
|
||||||
|
|
||||||
const char code2[] = "struct evt; void f(const evt & event);";
|
const char code2[] = "struct evt; void f(const evt & event);";
|
||||||
ASSERT_EQUALS("1: struct evt ; void f ( const evt & event@1 ) ;\n",
|
ASSERT_EQUALS("1: struct evt ; void f ( const evt & event@1 ) ;\n",
|
||||||
tokenize(code2));
|
tokenize(code2));
|
||||||
ASSERT_EQUALS("1: struct evt ; void f ( const evt & event ) ;\n",
|
ASSERT_THROW(tokenize(code2, "test.c"), InternalError);
|
||||||
tokenize(code2, "test.c"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void varid42() {
|
void varid42() {
|
||||||
|
|
Loading…
Reference in New Issue