From 7d94230329db107b006e01bda6c6eebee6c0e7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 28 Nov 2012 07:33:24 +0100 Subject: [PATCH] Fixed #4079 (#if condition does not evaluate numbers with sign) --- lib/preprocessor.cpp | 1 + test/testpreprocessor.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 4033f65a7..1497a194b 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -1450,6 +1450,7 @@ void Preprocessor::simplifyCondition(const std::map &c } // simplify calculations.. + tokenizer.concatenateNegativeNumber(); bool modified = true; while (modified) { modified = false; diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index b4c05f0c6..6acf223ad 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -222,6 +222,7 @@ private: TEST_CASE(define_if1); TEST_CASE(define_if2); TEST_CASE(define_if3); + TEST_CASE(define_if4); // #4079 - #define X +123 TEST_CASE(define_ifdef); TEST_CASE(define_ifndef1); TEST_CASE(define_ifndef2); @@ -2695,6 +2696,15 @@ private: ASSERT_EQUALS("\n\nFOO\n\n", preprocessor.getcode(filedata,"","")); } + void define_if4() { + const char filedata[] = "#define X +123\n" + "#if X==123\n" + "FOO\n" + "#endif"; + Preprocessor preprocessor(NULL, this); + ASSERT_EQUALS("\n\nFOO\n\n", preprocessor.getcode(filedata,"","")); + } + void define_ifdef() { { const char filedata[] = "#define ABC\n"