forked from adishavit/Terminators
-
Notifications
You must be signed in to change notification settings - Fork 0
/
termination_graph.gv
115 lines (94 loc) · 5.1 KB
/
termination_graph.gv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// http://www.graphviz.org/doc/info/attrs.html
digraph g{
node [fontsize=11,fontname="Monospace"];
edge [fontsize=11,fontname="Monospace"];
//rankdir=LR
//ratio=1.5
exit [label="std::exit(int exit_code)",style="filled"]
Cleanup [label="Normal Program Termination:\ndestroys all static objects;\n flushes all buffers;\n closes all I/O channels",shape=box];
atexit_func [label="std::atexit() func"];
atexit [label="std::atexit()"];
terminate [label="std::terminate()",style="filled"]
abort [label="std::abort()",style="filled"]
quick_exit [label="std::quick_exit()",style="filled"]
at_quick_exit_func [label="std::at_quick_exit() func"];
at_quick_exit [label="std::at_quick_exit()"];
_Exit [label="_Exit(int exit_code)",style="filled"]
terminate_handler [label="terminate_handler()"]
mainReturn [label="return from main()",shape=box,style="rounded"];
destroyLocal [label="Destroy local objects\nand unwind stack.", shape=box];
terminateCause [label="An exception is thrown\nand not caught;\n\nA noexcept specification\nis violated;\n\nUncaught exception\nduring the execution\nof a parallel\nalgorithm element\naccess [C++17];\n...",shape=box,style="rounded"];
unexpectedCause [label="A dynamic exception\nspecification is violated\n[DEPRECATED]",shape=box,style="rounded"];
unexpected [label="std::unexpected()\n[DEPRECATED]",style="filled"]
unexpected_handler [label="std::unexpected_handler()\n[DEPRECATED]"];
user_unexpected_handler [label="User Unexpected Handler",shape=box,style="rounded"]
set_unexpected [label="std::set_unexpected()"]
user_terminate_handler [label="User Terminate Handler",shape=box,style="rounded"];
set_terminate [label="std::set_terminate()"]
signal [label="std::signal(SIGABRT)"]
user_signal_handler [label="User ABRT signal handler()",shape=box,style="rounded"]
raise [label="std::raise(SIGABRT)",style="filled"]
PROGRAM [shape=circle];
END [shape=doublecircle];
__fastfail [label="__fastfail(FAST_FAIL_*)\n[Microsoft Specific]",style="filled",fillcolor=gray94, color=gray,fontcolor=gray44]
/////////////////////////////////////////////////////////////////////////////
PROGRAM -> mainReturn [color=darkorange style=bold]
PROGRAM -> terminateCause
PROGRAM -> unexpectedCause
PROGRAM -> exit [label=calls]
PROGRAM -> quick_exit [label=calls]
PROGRAM -> unexpected [label=calls]
PROGRAM -> abort [label=calls]
PROGRAM -> terminate [label=calls]
PROGRAM -> _Exit [label=calls]
PROGRAM -> raise [label=calls]
exit -> Cleanup [color=darkorange style=bold]
Cleanup -> atexit_func [color=darkorange style=bold]
atexit -> atexit_func [label=sets]
atexit_func -> atexit_func [label="next func"]
atexit_func -> terminate [label="if func throws"];
atexit_func -> END [label=otherwise color=darkorange style=bold]
abort -> END [label=otherwise]
at_quick_exit -> at_quick_exit_func [label=sets]
quick_exit-> at_quick_exit_func;
at_quick_exit_func -> at_quick_exit_func [label="next func"];
at_quick_exit_func -> terminate [label="if func throws"];
at_quick_exit_func -> _Exit
_Exit -> END
terminate -> terminate_handler
terminate_handler -> abort [label="Default"]
terminate_handler -> user_terminate_handler [label="otherwise"]
set_terminate -> terminate_handler [label=sets]
terminateCause -> terminate
mainReturn -> destroyLocal [color=darkorange style=bold]
destroyLocal -> exit [color=darkorange style=bold]
unexpectedCause -> unexpected
unexpected -> unexpected_handler
unexpected_handler -> terminate [label="Default & if handler throws."]
unexpected_handler -> user_unexpected_handler [label=otherwise];
set_unexpected -> unexpected_handler [label=sets];
user_unexpected_handler -> END [style=dashed];
user_terminate_handler -> END [style=dashed];
signal -> user_signal_handler [label=sets]
abort -> user_signal_handler [label="if set"]
user_signal_handler -> END [style=dashed];
raise -> user_signal_handler
PROGRAM -> __fastfail [label="calls\n[Microsoft Specific]", color=gray]
__fastfail -> END [color=gray]
// invisibles
//terminate -> abort [style="invis"]
/////////////////////////////////////////////////////////////////////////////
{rank=source; PROGRAM }
{rank=same; mainReturn terminateCause unexpectedCause}
//{rank=same; at_quick_exit at_quick_exit_func}
//{rank=same; set_terminate terminate_handler}
//{rank=same; set_unexpected unexpected_handler}
//{rank=same; atexit atexit_func}
//{rank=same; signal user_signal_handler }
//{rank=same; quick_exit raise exit terminate unexpected abort _Exit __fastfail}
//{rank=same; _Exit __fastfail }
//{rank=same; abort raise }
{rank=same; __fastfail END }
{rank=same; user_unexpected_handler user_terminate_handler user_signal_handler}
{rank=sink; END }
}