forked from OSchip/llvm-project
77 lines
1.9 KiB
Python
Executable File
77 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Automatically formatted with yapf (https://github.com/google/yapf)
|
|
|
|
# Fake 'opt' program that can be made to crash on request. For testing
|
|
# the 'reduce_pipeline.py' automatic 'opt' NPM pipeline reducer.
|
|
|
|
import argparse
|
|
import os
|
|
import shutil
|
|
import signal
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-passes', action='store', dest='passes', required=True)
|
|
parser.add_argument('-print-pipeline-passes',
|
|
dest='print_pipeline_passes',
|
|
action='store_true')
|
|
parser.add_argument('-crash-seq',
|
|
action='store',
|
|
dest='crash_seq',
|
|
required=True)
|
|
parser.add_argument('-o', action='store', dest='output')
|
|
parser.add_argument('input')
|
|
[args, unknown_args] = parser.parse_known_args()
|
|
|
|
# Expand pipeline if '-print-pipeline-passes'.
|
|
if args.print_pipeline_passes:
|
|
if args.passes == 'EXPAND_a_to_f':
|
|
print('a,b,c,d,e,f')
|
|
else:
|
|
print(args.passes)
|
|
exit(0)
|
|
|
|
# Parse '-crash-seq'.
|
|
crash_seq = []
|
|
tok = ''
|
|
for c in args.crash_seq:
|
|
if c == ',':
|
|
if tok != '':
|
|
crash_seq.append(tok)
|
|
tok = ''
|
|
else:
|
|
tok += c
|
|
if tok != '':
|
|
crash_seq.append(tok)
|
|
print(crash_seq)
|
|
|
|
# Parse '-passes' and see if we need to crash.
|
|
tok = ''
|
|
for c in args.passes:
|
|
if c == ',':
|
|
if len(crash_seq) > 0 and crash_seq[0] == tok:
|
|
crash_seq.pop(0)
|
|
tok = ''
|
|
elif c == '(':
|
|
tok = ''
|
|
elif c == ')':
|
|
if len(crash_seq) > 0 and crash_seq[0] == tok:
|
|
crash_seq.pop(0)
|
|
tok = ''
|
|
else:
|
|
tok += c
|
|
if len(crash_seq) > 0 and crash_seq[0] == tok:
|
|
crash_seq.pop(0)
|
|
|
|
# Copy input to output.
|
|
if args.output:
|
|
shutil.copy(args.input, args.output)
|
|
|
|
# Crash if all 'crash_seq' passes occurred in right order.
|
|
if len(crash_seq) == 0:
|
|
print('crash')
|
|
os.kill(os.getpid(), signal.SIGKILL)
|
|
else:
|
|
print('no crash')
|
|
exit(0)
|