]> granicus.if.org Git - clang/commitdiff
Enhanced serialization testing by also pretty-printing CFGs constructed from ASTs
authorTed Kremenek <kremenek@apple.com>
Thu, 29 Nov 2007 01:24:25 +0000 (01:24 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 29 Nov 2007 01:24:25 +0000 (01:24 +0000)
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

Driver/SerializationTest.cpp

index 9f756136bd69c33424599ed43b05c029d5885543..b7d9b75bb5a48763b52c2731fb6f837a9a94619c 100644 (file)
@@ -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<FunctionDecl>(*I))
+        if (FD->getBody()) {
+          // Construct and print a CFG.
+          Janitor<CFG> 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<Decl>();
     Printer->HandleTopLevelDecl(decl);
     FilePrinter->HandleTopLevelDecl(decl);
+    
+    if (FunctionDecl* FD = dyn_cast<FunctionDecl>(decl))
+      if (FD->getBody()) {
+        // Construct and print a CFG.
+        Janitor<CFG> cfg(CFG::buildCFG(FD->getBody()));
+        cfg->print(DeclPP);
+      }
   }
 }