llvm-project

Форк
0
73 строки · 1.8 Кб
1
#!/usr/bin/env python3
2

3
# Automatically formatted with yapf (https://github.com/google/yapf)
4

5
# Fake 'opt' program that can be made to crash on request. For testing
6
# the 'reduce_pipeline.py' automatic 'opt' NPM pipeline reducer.
7

8
import argparse
9
import os
10
import shutil
11
import signal
12

13
parser = argparse.ArgumentParser()
14
parser.add_argument("-passes", action="store", dest="passes", required=True)
15
parser.add_argument(
16
    "-print-pipeline-passes", dest="print_pipeline_passes", action="store_true"
17
)
18
parser.add_argument("-crash-seq", action="store", dest="crash_seq", required=True)
19
parser.add_argument("-o", action="store", dest="output")
20
parser.add_argument("input")
21
[args, unknown_args] = parser.parse_known_args()
22

23
# Expand pipeline if '-print-pipeline-passes'.
24
if 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'.
32
crash_seq = []
33
tok = ""
34
for c in args.crash_seq:
35
    if c == ",":
36
        if tok != "":
37
            crash_seq.append(tok)
38
        tok = ""
39
    else:
40
        tok += c
41
if tok != "":
42
    crash_seq.append(tok)
43
print(crash_seq)
44

45
# Parse '-passes' and see if we need to crash.
46
tok = ""
47
for 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 += c
60
if len(crash_seq) > 0 and crash_seq[0] == tok:
61
    crash_seq.pop(0)
62

63
# Copy input to output.
64
if args.output:
65
    shutil.copy(args.input, args.output)
66

67
# Crash if all 'crash_seq' passes occurred in right order.
68
if len(crash_seq) == 0:
69
    print("crash")
70
    os.kill(os.getpid(), signal.SIGKILL)
71
else:
72
    print("no crash")
73
    exit(0)
74

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.