From e50f33f47e961229f3d3f1d81201054c1e157351 Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Mon, 24 Feb 2020 17:58:46 +0100
Subject: [PATCH] [crowbar] catch exception if pretty-printed code is not
 re-parsable

---
 tests/crowbar/test_ghost_cfg.ml | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/tests/crowbar/test_ghost_cfg.ml b/tests/crowbar/test_ghost_cfg.ml
index 95bd01fd9dc..5395704f257 100644
--- a/tests/crowbar/test_ghost_cfg.ml
+++ b/tests/crowbar/test_ghost_cfg.ml
@@ -512,12 +512,18 @@ let check_file (env, file) =
           let prj2 = Project.create "copy" in
           Project.set_current prj2;
           Kernel.Files.set [ Filepath.Normalized.of_string file_name ];
-          File.init_from_cmdline ();
-          let copy_buf = Buffer.create 150 in
-          let fmt = Format.formatter_of_buffer copy_buf in
-          let f = Globals.Functions.find_by_name "f" in
-          Kernel_function.pretty fmt f;
-          if Buffer.contents norm_buf <> Buffer.contents copy_buf then begin
+          let parse_success =
+            try
+              File.init_from_cmdline (); true
+            with
+              Log.AbortError _ -> ignore_deferred_errors (); false
+          in
+          if parse_success then begin
+            let copy_buf = Buffer.create 150 in
+            let fmt = Format.formatter_of_buffer copy_buf in
+            let f = Globals.Functions.find_by_name "f" in
+            Kernel_function.pretty fmt f;
+            if Buffer.contents norm_buf <> Buffer.contents copy_buf then begin
               let norm = open_out (file_name ^ ".norm.c") in
               Buffer.output_buffer norm norm_buf;
               flush norm;
@@ -528,6 +534,9 @@ let check_file (env, file) =
               close_out copy;
               report file_name "Found ghost code not well pretty-printed"
             end else true
+          end else begin
+            report file_name "Error during re-parsing of pretty-printed code"
+          end
         end
       else
         report file_name "Found ghost code that should have been accepted"
-- 
GitLab