Merge pull request #88 from leg0/ticket_3675

Fixed ticket #3675.
This commit is contained in:
Daniel Marjamäki 2012-03-24 00:36:37 -07:00
commit 4076c46a33
2 changed files with 19 additions and 1 deletions

View File

@ -889,7 +889,7 @@ static void simplifyVarMap(std::map<std::string, std::string> &variables)
// TODO: 2. handle function-macros too.
std::map<std::string, std::string>::iterator it = variables.find(varValue);
while (it != variables.end() && it != i) {
while (it != variables.end() && it->first != it->second && it != i) {
varValue = it->second;
it = variables.find(varValue);
}

View File

@ -129,6 +129,7 @@ private:
TEST_CASE(if_or_2);
TEST_CASE(if_macro_eq_macro); // #3536
TEST_CASE(ticket_3675);
TEST_CASE(multiline1);
TEST_CASE(multiline2);
@ -1521,6 +1522,23 @@ private:
ASSERT_EQUALS("\n\n\n\nWilma\n\n\n\n", actual[""]);
}
void ticket_3675() {
const std::string code("#ifdef YYSTACKSIZE\n"
"#define YYMAXDEPTH YYSTACKSIZE\n"
"#else\n"
"#define YYSTACKSIZE YYMAXDEPTH\n"
"#endif\n"
"#if YYDEBUG\n"
"#endif\n");
Settings settings;
Preprocessor preprocessor(&settings, this);
std::istringstream istr(code);
std::map<std::string, std::string> actual;
preprocessor.preprocess(istr, actual, "file.c");
// There's nothing to assert. It just needs to not hang.
}
void multiline1() {
const char filedata[] = "#define str \"abc\" \\\n"
" \"def\" \n"