Skip to content

Commit 5adfcb0

Browse files
authored
Allow passing creduce options through creduce-clang-crash.py (#92141)
This change allows us to pass creduce options to creduce-clang-crash.py script. With this, `--n` is no longer needed to specify the number of cores, so removed the flag. The motivation is #87933 (comment) suggests that disabling creduce renaming passes helps people to further reduce crash manually.
1 parent 80f8ae3 commit 5adfcb0

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

clang/utils/creduce-clang-crash.py

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env python3
22
"""Calls C-Reduce to create a minimal reproducer for clang crashes.
3+
Unknown arguments are treated at creduce options.
34
45
Output files:
56
*.reduced.sh -- crash reproducer with minimal arguments
@@ -70,7 +71,7 @@ def write_to_script(text, filename):
7071

7172

7273
class Reduce(object):
73-
def __init__(self, crash_script, file_to_reduce, core_number):
74+
def __init__(self, crash_script, file_to_reduce, creduce_flags):
7475
crash_script_name, crash_script_ext = os.path.splitext(crash_script)
7576
file_reduce_name, file_reduce_ext = os.path.splitext(file_to_reduce)
7677

@@ -83,8 +84,7 @@ def __init__(self, crash_script, file_to_reduce, core_number):
8384
self.clang_args = []
8485
self.expected_output = []
8586
self.needs_stack_trace = False
86-
self.creduce_flags = ["--tidy"]
87-
self.creduce_flags = ["--n", str(core_number)]
87+
self.creduce_flags = ["--tidy"] + creduce_flags
8888

8989
self.read_clang_args(crash_script, file_to_reduce)
9090
self.read_expected_output()
@@ -412,13 +412,13 @@ def reduce_clang_args(self):
412412
print("Reduced command:", reduced_cmd)
413413

414414
def run_creduce(self):
415+
full_creduce_cmd = (
416+
[creduce_cmd] + self.creduce_flags + [self.testfile, self.file_to_reduce]
417+
)
415418
print("\nRunning C-Reduce...")
419+
verbose_print(quote_cmd(full_creduce_cmd))
416420
try:
417-
p = subprocess.Popen(
418-
[creduce_cmd]
419-
+ self.creduce_flags
420-
+ [self.testfile, self.file_to_reduce]
421-
)
421+
p = subprocess.Popen(full_creduce_cmd)
422422
p.communicate()
423423
except KeyboardInterrupt:
424424
# Hack to kill C-Reduce because it jumps into its own pgid
@@ -458,26 +458,20 @@ def main():
458458
help="The path to the `creduce` executable. "
459459
"Required if `creduce` is not in PATH environment.",
460460
)
461-
parser.add_argument(
462-
"--n",
463-
dest="core_number",
464-
type=int,
465-
default=max(4, multiprocessing.cpu_count() // 2),
466-
help="Number of cores to use.",
467-
)
468461
parser.add_argument("-v", "--verbose", action="store_true")
469-
args = parser.parse_args()
470-
462+
args, creduce_flags = parser.parse_known_args()
471463
verbose = args.verbose
472464
llvm_bin = os.path.abspath(args.llvm_bin) if args.llvm_bin else None
473465
creduce_cmd = check_cmd("creduce", None, args.creduce)
474466
clang_cmd = check_cmd("clang", llvm_bin, args.clang)
475-
core_number = args.core_number
476467

477468
crash_script = check_file(args.crash_script[0])
478469
file_to_reduce = check_file(args.file_to_reduce[0])
479470

480-
r = Reduce(crash_script, file_to_reduce, core_number)
471+
if "--n" not in creduce_flags:
472+
creduce_flags += ["--n", str(max(4, multiprocessing.cpu_count() // 2))]
473+
474+
r = Reduce(crash_script, file_to_reduce, creduce_flags)
481475

482476
r.simplify_clang_args()
483477
r.write_interestingness_test()

0 commit comments

Comments
 (0)