Fixed #3737 (Preprocessor: __cplusplus always defined for c++ code)
This commit is contained in:
parent
99a29eafc9
commit
dad2fb6db1
|
@ -1498,6 +1498,8 @@ std::string Preprocessor::getcode(const std::string &filedata, const std::string
|
||||||
|
|
||||||
// Create a map for the cfg for faster access to defines
|
// Create a map for the cfg for faster access to defines
|
||||||
std::map<std::string, std::string> cfgmap(getcfgmap(cfg));
|
std::map<std::string, std::string> cfgmap(getcfgmap(cfg));
|
||||||
|
if (Path::isCPP(filename) && cfgmap.find("__cplusplus") == cfgmap.end())
|
||||||
|
cfgmap["__cplusplus"] = "1";
|
||||||
|
|
||||||
std::stack<std::string> filenames;
|
std::stack<std::string> filenames;
|
||||||
filenames.push(filename);
|
filenames.push(filename);
|
||||||
|
|
|
@ -236,6 +236,7 @@ private:
|
||||||
TEST_CASE(predefine2);
|
TEST_CASE(predefine2);
|
||||||
TEST_CASE(predefine3);
|
TEST_CASE(predefine3);
|
||||||
TEST_CASE(predefine4);
|
TEST_CASE(predefine4);
|
||||||
|
TEST_CASE(predefine5); // automatically define __cplusplus
|
||||||
|
|
||||||
// Test Preprocessor::simplifyCondition
|
// Test Preprocessor::simplifyCondition
|
||||||
TEST_CASE(simplifyCondition);
|
TEST_CASE(simplifyCondition);
|
||||||
|
@ -2977,6 +2978,13 @@ private:
|
||||||
ASSERT_EQUALS("char buf[$123];\n", actual);
|
ASSERT_EQUALS("char buf[$123];\n", actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void predefine5() { // #3737 - automatically define __cplusplus
|
||||||
|
const char code[] = "#ifdef __cplusplus\n123\n#endif";
|
||||||
|
Preprocessor preprocessor(NULL,this);
|
||||||
|
ASSERT_EQUALS("\n\n\n", preprocessor.getcode(code, "X=123", "test.c"));
|
||||||
|
ASSERT_EQUALS("\n123\n\n", preprocessor.getcode(code, "X=123", "test.cpp"));
|
||||||
|
}
|
||||||
|
|
||||||
void simplifyCondition() {
|
void simplifyCondition() {
|
||||||
// Ticket #2794
|
// Ticket #2794
|
||||||
std::map<std::string, std::string> cfg;
|
std::map<std::string, std::string> cfg;
|
||||||
|
|
Loading…
Reference in New Issue