brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 2d3b959 Raw
74 lines · python
1#!/usr/bin/env python32 3# Automatically formatted with yapf (https://github.com/google/yapf)4 5# Fake 'opt' program that can be made to crash on request. For testing6# the 'reduce_pipeline.py' automatic 'opt' NPM pipeline reducer.7 8import argparse9import os10import shutil11import signal12 13parser = argparse.ArgumentParser()14parser.add_argument("-passes", action="store", dest="passes", required=True)15parser.add_argument(16    "-print-pipeline-passes", dest="print_pipeline_passes", action="store_true"17)18parser.add_argument("-crash-seq", action="store", dest="crash_seq", required=True)19parser.add_argument("-o", action="store", dest="output")20parser.add_argument("input")21[args, unknown_args] = parser.parse_known_args()22 23# Expand pipeline if '-print-pipeline-passes'.24if args.print_pipeline_passes:25    if args.passes == "EXPAND_a_to_f":26        print("a,b,c,d,e,f")27    else:28        print(args.passes)29    exit(0)30 31# Parse '-crash-seq'.32crash_seq = []33tok = ""34for c in args.crash_seq:35    if c == ",":36        if tok != "":37            crash_seq.append(tok)38        tok = ""39    else:40        tok += c41if tok != "":42    crash_seq.append(tok)43print(crash_seq)44 45# Parse '-passes' and see if we need to crash.46tok = ""47for c in args.passes:48    if c == ",":49        if len(crash_seq) > 0 and crash_seq[0] == tok:50            crash_seq.pop(0)51        tok = ""52    elif c == "(":53        tok = ""54    elif c == ")":55        if len(crash_seq) > 0 and crash_seq[0] == tok:56            crash_seq.pop(0)57        tok = ""58    else:59        tok += c60if len(crash_seq) > 0 and crash_seq[0] == tok:61    crash_seq.pop(0)62 63# Copy input to output.64if args.output:65    shutil.copy(args.input, args.output)66 67# Crash if all 'crash_seq' passes occurred in right order.68if len(crash_seq) == 0:69    print("crash")70    os.kill(os.getpid(), signal.SIGKILL)71else:72    print("no crash")73    exit(0)74