[PATCH] D59118: creduce script for clang crashes

Amy Huang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 11 11:12:08 PDT 2019


akhuang updated this revision to Diff 190126.
akhuang marked 15 inline comments as done.
akhuang added a comment.

Addressed readability comments


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59118/new/

https://reviews.llvm.org/D59118

Files:
  clang/utils/creduce-clang-crash.py


Index: clang/utils/creduce-clang-crash.py
===================================================================
--- clang/utils/creduce-clang-crash.py
+++ clang/utils/creduce-clang-crash.py
@@ -8,6 +8,7 @@
 import stat
 import sys
 import subprocess
+import pipes
 
 def is_exe(fpath):
   return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
@@ -33,11 +34,9 @@
   Return as a string.
   """
   # Get clang call from build script
-  cmd = None
-  with open(build_script, 'r') as f:
-    cmd = f.read()
-    cmd = re.sub("#!.*\n", "", cmd)
-    cmd = cmd.rstrip('\n\r')
+  # Assumes the call is the last line of the script
+  with open(build_script) as f:
+    cmd = f.readlines()[-1].rstrip('\n\r')
 
   # Get crash output
   p = subprocess.Popen(build_script,
@@ -46,21 +45,22 @@
   crash_output, _ = p.communicate()
 
   output = ['#!/bin/bash']
-  output.append('%s --crash %s >& t.log || exit 1' % (llvm_not, cmd))
+  output.append('%s --crash %s >& t.log || exit 1' % (pipes.quote(llvm_not),
+                                                      cmd))
 
   # Add messages from crash output to the test
   # If there is an Assertion failure, use that; otherwise use the
   # last five stack trace functions
-  assertion_re = "Assertion \`([^\']+)\' failed"
+  assertion_re = r'Assertion `([^\']+)\' failed'
   assertion_match = re.search(assertion_re, crash_output)
   if assertion_match:
-    msg = assertion_match.group(1).replace('"', '\\"')
-    output.append('grep "%s" t.log || exit 1' % msg)
+    msg = assertion_match.group(1)
+    output.append('grep %s t.log || exit 1' % pipes.quote(msg))
   else:
-    stacktrace_re = "#[0-9]+\s+0[xX][0-9a-fA-F]+\s*([^(]+)\("
+    stacktrace_re = r'#[0-9]+\s+0[xX][0-9a-fA-F]+\s*([^(]+)\('
     matches = re.findall(stacktrace_re, crash_output)
-    del matches[:len(matches)-5]
-    output += ['grep "%s" t.log || exit 1' % msg for msg in matches]
+    del matches[:-5]
+    output += ['grep %s t.log || exit 1' % pipes.quote(msg) for msg in matches]
 
   return output
 
@@ -73,11 +73,11 @@
   parser.add_argument('-o', '--output', dest='output', type=str,
                       help='Name of the output file for the reduction. Optional.')
   parser.add_argument('--llvm-not', dest='llvm_not', type=str,
-                      help="""The path to the llvm-not executable.
-                      Required if 'not' is not in PATH environment.""");
+                      help="The path to the llvm-not executable. "
+                      "Required if 'not' is not in PATH environment.");
   parser.add_argument('--creduce', dest='creduce', type=str,
-                      help="""The path to the C-Reduce executable.
-                      Required if 'creduce' is not in PATH environment.""");
+                      help="The path to the C-Reduce executable. "
+                      "Required if 'creduce' is not in PATH environment.");
   args = parser.parse_args()
 
   build_script = os.path.abspath(args.build_script[0])
@@ -105,19 +105,11 @@
   test_contents = create_test(build_script, llvm_not)
   testname, _ = os.path.splitext(file_to_reduce)
   testfile = testname + '.test.sh'
-  open(testfile, 'w').write('\n'.join(test_contents))
+  with open(testfile, 'w') as f:
+    f.write('\n'.join(test_contents))
   os.chmod(testfile, os.stat(testfile).st_mode | stat.S_IEXEC)
 
-  # Call C-Reduce
-  try:
-    p = subprocess.Popen([creduce, testfile, file_to_reduce])
-    p.communicate()
-
-  except KeyboardInterrupt:
-    print('\n\nctrl-c detected, killed creduce')
-    p.kill()
-
-  sys.exit(0)
+  sys.exit(subprocess.call([creduce, testfile, file_to_reduce]))
 
 if __name__ == '__main__':
   main()


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59118.190126.patch
Type: text/x-patch
Size: 3671 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190311/6f152964/attachment.bin>


More information about the cfe-commits mailing list