diff --git a/Makefile b/Makefile index 6f86e205f77..aeb3070408a 100644 --- a/Makefile +++ b/Makefile @@ -844,7 +844,7 @@ test/testmathlib.o: test/testmathlib.cpp lib/check.h lib/checkers.h lib/color.h test/testmemleak.o: test/testmemleak.cpp lib/check.h lib/checkers.h lib/checkimpl.h lib/checkmemoryleak.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/refthunk.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} ${CFLAGS_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testmemleak.cpp -test/testnullpointer.o: test/testnullpointer.cpp lib/check.h lib/checkers.h lib/checkimpl.h lib/checknullpointer.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/refthunk.h lib/settings.h lib/smallvector.h lib/standards.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h +test/testnullpointer.o: test/testnullpointer.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkers.h lib/checkimpl.h lib/checknullpointer.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/refthunk.h lib/settings.h lib/smallvector.h lib/standards.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} ${CFLAGS_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testnullpointer.cpp test/testoptions.o: test/testoptions.cpp lib/check.h lib/checkers.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/refthunk.h lib/settings.h lib/standards.h lib/utils.h test/fixture.h test/options.h diff --git a/lib/ctu.cpp b/lib/ctu.cpp index feef065d3ac..3346329dc65 100644 --- a/lib/ctu.cpp +++ b/lib/ctu.cpp @@ -124,7 +124,7 @@ std::string CTU::FileInfo::FunctionCall::toXmlString() const std::string CTU::FileInfo::NestedCall::toXmlString() const { std::ostringstream out; - out << " #include @@ -183,6 +184,7 @@ class TestNullPointer : public TestFixture { TEST_CASE(isPointerDeRefFunctionDecl); TEST_CASE(ctuTest); + TEST_CASE(ctuXml); } struct CheckOptions @@ -5089,6 +5091,26 @@ class TestNullPointer : public TestFixture { "}\n"); ASSERT_EQUALS("", errout_str()); } + + void ctuXml() { + SimpleTokenizer tokenizer(settings, *this); + ASSERT(tokenizer.tokenize("void use(int *p) { a = *p + 3; }\n" + "void call(int x, int *p) { x++; use(p); }\n" + "int main() {\n" + " call(4,0);\n" + "}\n")); + const CTU::FileInfo *fi1 = CTU::getFileInfo(tokenizer); + ASSERT_EQUALS(1U, fi1->nestedCalls.size()); + + tinyxml2::XMLDocument doc; + const tinyxml2::XMLError xmlError = doc.Parse(("" + fi1->toString() + "").c_str()); + ASSERT_EQUALS(tinyxml2::XML_SUCCESS, xmlError); + CTU::FileInfo fi2; + fi2.loadFromXml(doc.FirstChildElement()); + ASSERT_EQUALS(1U, fi2.nestedCalls.size()); + ASSERT_EQUALS(fi1->toString(), fi2.toString()); + delete fi1; + } }; REGISTER_TEST(TestNullPointer)