diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp
--- a/llvm/lib/Transforms/Utils/Debugify.cpp
+++ b/llvm/lib/Transforms/Utils/Debugify.cpp
@@ -513,15 +513,19 @@
     return;
   }
 
-  OS_FILE << "{\"file\":\"" << FileNameFromCU << "\", ";
+  if (auto L = OS_FILE.lock()) {
+    OS_FILE << "{\"file\":\"" << FileNameFromCU << "\", ";
 
-  StringRef PassName = NameOfWrappedPass != "" ? NameOfWrappedPass : "no-name";
-  OS_FILE << "\"pass\":\"" << PassName << "\", ";
+    StringRef PassName =
+        NameOfWrappedPass != "" ? NameOfWrappedPass : "no-name";
+    OS_FILE << "\"pass\":\"" << PassName << "\", ";
 
-  llvm::json::Value BugsToPrint{std::move(Bugs)};
-  OS_FILE << "\"bugs\": " << BugsToPrint;
+    llvm::json::Value BugsToPrint{std::move(Bugs)};
+    OS_FILE << "\"bugs\": " << BugsToPrint;
 
-  OS_FILE << "}\n";
+    OS_FILE << "}\n";
+  }
+  OS_FILE.close();
 }
 
 bool llvm::checkDebugInfoMetadata(Module &M,
diff --git a/llvm/test/tools/llvm-original-di-preservation/Inputs/corrupted.json b/llvm/test/tools/llvm-original-di-preservation/Inputs/corrupted.json
new file mode 100644
--- /dev/null
+++ b/llvm/test/tools/llvm-original-di-preservation/Inputs/corrupted.json
@@ -0,0 +1,10 @@
+{"file":"debug.c", "pass":"Simplify the CFG", "bugs": [[{"action":"drop","fn-name":"debug_class_type_samep","metadata":"dbg-var-intrinsic","name":"pf1"},{"action":"drop","fn-name":"debug_class_type_samep","metadata":"dbg-var-intrinsic","name":"pf2"},{"action":"drop","fn-name":"debug_class_type_samep","metadata":"dbg-var-intrinsic","name":"pv1"},{"action":"drop","fn-name":"debug_class_type_samep","metadata":"dbg-var-intrinsic","name":"pv2"}]]}
+{"file":"debug.c", "pass":"Combine redundant instructions", "bugs": [[{"action":"drop","fn-name":"debug_write_block","metadata":"dbg-var-intrinsic","name":"n"},{"action":"drop","fn-name":"debug_write_block","metadata":"dbg-var-intrinsic","name":"b"}]]}
+{"file":"ieee.c", "pass":"Interprocedural Sparse Conditional Constant Propagation", "bugs": [[{"action":"not-generate","bb-name":"land.lhs.true251","fn-name":"parse_ieee_bb","instr":"br","metadata":"DILocation"},{"action":"not-generate","bb-name":"cond.false70","fn-n{"file":"stabs.c", "pass":"Simplify the CFG", "bugs": [[{"action":"not-generate","bb-name":"land.lhs.true76","fn-name":"parse_stab","instr":"icmp","metadata":"DILocation"}]]}
+ame":"ieee_end_class_type","instr":"br","metadata":"DILocation"},{"action":"not-generate","bb-name":"lor.lhs.false79","fn-name":"ieee_end_class_type","instr":"br","metadata":"DILocation"}]]}
+{"file":"wrstabs.c", "pass":"Simplify the CFG", "bugs": [[{"action":"drop","fn-name":"stab_bool_type","metadata":"dbg-var-intrinsic","name":"tindex"}]]}
+{"file":"prdbg.c", "pass":"Simplify the CFG", "bugs": [[{"action":"drop","fn-name":"pr_tag_type","metadata":"dbg-var-intrinsic","name":"t"},{"action":"drop","fn-name":"pr_tag_type","metadata":"dbg-var-intrinsic","name":"tag"}]]}
+{"file":"objdump.c", "pass":"Simplify the CFG", "bugs": [[{"action":"drop","fn-name":"dump_section_header","metadata":"dbg-var-intrinsic","name":"comma"},{"action":"drop","fn-name":"dump_section_header","metadata":"dbg-var-intrinsic","name":"ls"}]]}
+{"file":"objdump.c", "bad-field": [[{"action":"drop","fn-name":"dump_section_header","metadata":"dbg-var-intrinsic","name":"comma"},{"action":"drop","fn-name":"dump_section_header","metadata":"dbg-var-intrinsic","name":"ls"}]]}
+{"file":"wrstabs.c", "pass":"Simplify the CFG", "bugs": [[{"bad-bug":"stab_function_type"}]]}
+{"file":"wrstabs.c", "pass":"Simplify the CFG", "bugs": [[{"action":"drop","bb-name":"if.end","fn-name":"stab_function_type","instr":"br","metadata":"DILocation"}]]}
diff --git a/llvm/test/tools/llvm-original-di-preservation/Inputs/expected-skipped.html b/llvm/test/tools/llvm-original-di-preservation/Inputs/expected-skipped.html
new file mode 100644
--- /dev/null
+++ b/llvm/test/tools/llvm-original-di-preservation/Inputs/expected-skipped.html
@@ -0,0 +1,182 @@
+ 
+  
+  
+  
+  
+  
+  Location Bugs found by the Debugify
+  
+      | File+ | LLVM Pass Name+ | LLVM IR Instruction+ | Function Name+ | Basic Block Name+ | Action+ | 
+  
+    
+    | wrstabs.c+ | Simplify the CFG+ | br+ | stab_function_type+ | if.end+ | drop+ | 
+  
+
+
+
+  Summary of Location Bugs
+  
+      | LLVM Pass Name+ | Number of bugs+ | 
+    
+    | Simplify the CFG+ | 1+ | 
+  
+
+
+
+
+  SP Bugs found by the Debugify
+  
+      | File+ | LLVM Pass Name+ | Function Name+ | Action+ | 
+
+        | No bugs found+ | 
+    
+
+
+  Summary of SP Bugs
+  
+      | LLVM Pass Name+ | Number of bugs+ | 
+  
+
+        | No bugs found+ | 
+    
+
+
+
+  Variable Location Bugs found by the Debugify
+  
+      | File+ | LLVM Pass Name+ | Variable+ | Function+ | Action+ | 
+  
+    
+    | debug.c+ | Simplify the CFG+ | pf1+ | debug_class_type_samep+ | drop+ | 
+    
+    | debug.c+ | Simplify the CFG+ | pf2+ | debug_class_type_samep+ | drop+ | 
+    
+    | debug.c+ | Simplify the CFG+ | pv1+ | debug_class_type_samep+ | drop+ | 
+    
+    | debug.c+ | Simplify the CFG+ | pv2+ | debug_class_type_samep+ | drop+ | 
+  
+  
+    
+    | debug.c+ | Combine redundant instructions+ | n+ | debug_write_block+ | drop+ | 
+    
+    | debug.c+ | Combine redundant instructions+ | b+ | debug_write_block+ | drop+ | 
+  
+  
+    
+    | prdbg.c+ | Simplify the CFG+ | t+ | pr_tag_type+ | drop+ | 
+    
+    | prdbg.c+ | Simplify the CFG+ | tag+ | pr_tag_type+ | drop+ | 
+  
+  
+    
+    | objdump.c+ | Simplify the CFG+ | comma+ | dump_section_header+ | drop+ | 
+    
+    | objdump.c+ | Simplify the CFG+ | ls+ | dump_section_header+ | drop+ | 
+  
+
+
+
+  Summary of Variable Location Bugs
+  
+      | LLVM Pass Name+ | Number of bugs+ | 
+    
+    | Combine redundant instructions+ | 2+ | 
+    
+    | Simplify the CFG+ | 9+ | 
+  
+
+
+  
\ No newline at end of file
diff --git a/llvm/test/tools/llvm-original-di-preservation/basic.test b/llvm/test/tools/llvm-original-di-preservation/basic.test
--- a/llvm/test/tools/llvm-original-di-preservation/basic.test
+++ b/llvm/test/tools/llvm-original-di-preservation/basic.test
@@ -1,2 +1,8 @@
-RUN: %llvm-original-di-preservation %p/Inputs/sample.json %t.html
+RUN: %llvm-original-di-preservation %p/Inputs/sample.json %t.html | FileCheck %s
 RUN: diff -w %p/Inputs/expected-sample.html %t.html
+CHECK-NOT: Skipped lines:
+
+RUN: %llvm-original-di-preservation %p/Inputs/corrupted.json %t2.html | FileCheck %s -check-prefix=CORRUPTED
+RUN: diff -w %p/Inputs/expected-skipped.html %t2.html
+CORRUPTED: Skipped lines: 3
+CORRUPTED: Skipped bugs: 1
diff --git a/llvm/utils/llvm-original-di-preservation.py b/llvm/utils/llvm-original-di-preservation.py
--- a/llvm/utils/llvm-original-di-preservation.py
+++ b/llvm/utils/llvm-original-di-preservation.py
@@ -330,6 +330,7 @@
 def get_json(file):
   json_parsed = None
   di_checker_data = []
+  skipped_lines = 0
 
   # The file contains json object per line.
   # An example of the line (formatted json):
@@ -356,11 +357,11 @@
       try:
         json_object = loads(json_object_line)
       except:
-        print ("error: No valid di-checker data found.")
-        sys.exit(1)
-      di_checker_data.append(json_object)
+        skipped_lines += 1
+      else:
+        di_checker_data.append(json_object)
 
-  return di_checker_data
+  return (di_checker_data, skipped_lines)
 
 # Parse the program arguments.
 def parse_program_args(parser):
@@ -377,7 +378,7 @@
     print ("error: The output file must be '.html'.")
     sys.exit(1)
 
-  debug_info_bugs = get_json(opts.file_name)
+  (debug_info_bugs, skipped_lines) = get_json(opts.file_name)
 
   # Use the defaultdict in order to make multidim dicts.
   di_location_bugs = defaultdict(lambda: defaultdict(dict))
@@ -389,24 +390,37 @@
   di_sp_bugs_summary = OrderedDict()
   di_var_bugs_summary = OrderedDict()
 
+  skipped_bugs = 0
   # Map the bugs into the file-pass pairs.
   for bugs_per_pass in debug_info_bugs:
-    bugs_file = bugs_per_pass["file"]
-    bugs_pass = bugs_per_pass["pass"]
-
-    bugs = bugs_per_pass["bugs"][0]
+    try:
+      bugs_file = bugs_per_pass["file"]
+      bugs_pass = bugs_per_pass["pass"]
+      bugs = bugs_per_pass["bugs"][0]
+    except:
+      skipped_lines += 1
+      continue
 
     di_loc_bugs = []
     di_sp_bugs = []
     di_var_bugs = []
 
     for bug in bugs:
-      bugs_metadata = bug["metadata"]
+      try:
+        bugs_metadata = bug["metadata"]
+      except:
+        skipped_bugs += 1
+        continue
+
       if bugs_metadata == "DILocation":
-        action = bug["action"]
-        bb_name = bug["bb-name"]
-        fn_name = bug["fn-name"]
-        instr = bug["instr"]
+        try:
+          action = bug["action"]
+          bb_name = bug["bb-name"]
+          fn_name = bug["fn-name"]
+          instr = bug["instr"]
+        except:
+          skipped_bugs += 1
+          continue
         di_loc_bugs.append(DILocBug(action, bb_name, fn_name, instr))
 
         # Fill the summary dict.
@@ -415,8 +429,12 @@
         else:
           di_location_bugs_summary[bugs_pass] = 1
       elif bugs_metadata == "DISubprogram":
-        action = bug["action"]
-        name = bug["name"]
+        try:
+          action = bug["action"]
+          name = bug["name"]
+        except:
+          skipped_bugs += 1
+          continue
         di_sp_bugs.append(DISPBug(action, name))
 
         # Fill the summary dict.
@@ -425,9 +443,13 @@
         else:
           di_sp_bugs_summary[bugs_pass] = 1
       elif bugs_metadata == "dbg-var-intrinsic":
-        action = bug["action"]
-        fn_name = bug["fn-name"]
-        name = bug["name"]
+        try:
+          action = bug["action"]
+          fn_name = bug["fn-name"]
+          name = bug["name"]
+        except:
+          skipped_bugs += 1
+          continue
         di_var_bugs.append(DIVarBug(action, name, fn_name))
 
         # Fill the summary dict.
@@ -436,8 +458,9 @@
         else:
           di_var_bugs_summary[bugs_pass] = 1
       else:
-        print ("error: Unsupported metadata.")
-        sys.exit(1)
+        # Unsupported metadata.
+        skipped_bugs += 1
+        continue
 
     di_location_bugs[bugs_file][bugs_pass] = di_loc_bugs
     di_subprogram_bugs[bugs_file][bugs_pass] = di_sp_bugs
@@ -447,6 +470,11 @@
                        di_location_bugs_summary, di_sp_bugs_summary, \
                        di_var_bugs_summary, opts.html_file)
 
+  if skipped_lines > 0:
+    print ("Skipped lines: " + str(skipped_lines))
+  if skipped_bugs > 0:
+    print ("Skipped bugs: " + str(skipped_bugs))
+
 if __name__ == "__main__":
   Main()
   sys.exit(0)