Fixed ticket #403 (false positive::Array index out of range)
http://sourceforge.net/apps/trac/cppcheck/ticket/403
This commit is contained in:
parent
3e045dcf37
commit
084b3c002f
|
@ -703,7 +703,8 @@ std::string Preprocessor::getcode(const std::string &filedata, std::string cfg,
|
||||||
}
|
}
|
||||||
else if (line.find("#file \"") == 0 ||
|
else if (line.find("#file \"") == 0 ||
|
||||||
line.find("#endfile") == 0 ||
|
line.find("#endfile") == 0 ||
|
||||||
line.find("#define") == 0)
|
line.find("#define") == 0 ||
|
||||||
|
line.find("#undef") == 0)
|
||||||
{
|
{
|
||||||
// We must not remove #file tags or line numbers
|
// We must not remove #file tags or line numbers
|
||||||
// are corrupted. File tags are removed by the tokenizer.
|
// are corrupted. File tags are removed by the tokenizer.
|
||||||
|
@ -712,7 +713,7 @@ std::string Preprocessor::getcode(const std::string &filedata, std::string cfg,
|
||||||
line[0] == '#')
|
line[0] == '#')
|
||||||
{
|
{
|
||||||
// Remove #if, #else, #pragma etc, leaving only
|
// Remove #if, #else, #pragma etc, leaving only
|
||||||
// #define, #file and #endfile. and also lines
|
// #define, #undef, #file and #endfile. and also lines
|
||||||
// which are not part of this configuration.
|
// which are not part of this configuration.
|
||||||
line = "";
|
line = "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -726,13 +726,25 @@ private:
|
||||||
|
|
||||||
void preprocessor_undef()
|
void preprocessor_undef()
|
||||||
{
|
{
|
||||||
const char filedata[] = "#define AAA int a;\n"
|
{
|
||||||
"#undef AAA\n"
|
const char filedata[] = "#define AAA int a;\n"
|
||||||
"#define AAA char b=0;\n"
|
"#undef AAA\n"
|
||||||
"AAA\n";
|
"#define AAA char b=0;\n"
|
||||||
|
"AAA\n";
|
||||||
|
|
||||||
// Compare results..
|
// Compare results..
|
||||||
ASSERT_EQUALS("\n\n\nchar b=0;\n", OurPreprocessor::expandMacros(filedata));
|
ASSERT_EQUALS("\n\n\nchar b=0;\n", OurPreprocessor::expandMacros(filedata));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// ticket #403
|
||||||
|
const char filedata[] = "#define z p[2]\n"
|
||||||
|
"#undef z\n"
|
||||||
|
"int z;\n"
|
||||||
|
"z = 0;\n";
|
||||||
|
|
||||||
|
ASSERT_EQUALS("\n\nint z;\nz = 0;\n", OurPreprocessor::getcode(filedata, "", "", NULL));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void defdef()
|
void defdef()
|
||||||
|
|
Loading…
Reference in New Issue