From: Ted Kremenek Date: Thu, 29 Nov 2007 01:24:25 +0000 (+0000) Subject: Enhanced serialization testing by also pretty-printing CFGs constructed from ASTs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5656b782561f6a434fabec3c057cdbb63b55a1c8;p=clang Enhanced serialization testing by also pretty-printing CFGs constructed from ASTs both before and after serialization/deserialization. If the CFGs between the pre- and post- serialized/deserialized ASTs differ, the serialization has failed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44429 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp index 9f756136bd..b7d9b75bb5 100644 --- a/Driver/SerializationTest.cpp +++ b/Driver/SerializationTest.cpp @@ -18,6 +18,7 @@ #include "clang/AST/AST.h" #include "clang/AST/ASTConsumer.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/CFG.h" #include "llvm/System/Path.h" #include "llvm/Support/Streams.h" #include "llvm/Support/MemoryBuffer.h" @@ -130,6 +131,14 @@ void SerializationTest::Serialize(llvm::sys::Path& Filename, Printer->HandleTopLevelDecl(*I); FilePrinter->HandleTopLevelDecl(*I); + if (FunctionDecl* FD = dyn_cast(*I)) + if (FD->getBody()) { + // Construct and print a CFG. + Janitor cfg(CFG::buildCFG(FD->getBody())); + cfg->print(DeclPP); + } + + // Serialize the decl. Sezr.EmitOwnedPtr(*I); } } @@ -274,6 +283,13 @@ void SerializationTest::Deserialize(llvm::sys::Path& Filename, Decl* decl = Dezr.ReadOwnedPtr(); Printer->HandleTopLevelDecl(decl); FilePrinter->HandleTopLevelDecl(decl); + + if (FunctionDecl* FD = dyn_cast(decl)) + if (FD->getBody()) { + // Construct and print a CFG. + Janitor cfg(CFG::buildCFG(FD->getBody())); + cfg->print(DeclPP); + } } }