Ticket #8681: boost-test.cpp

File boost-test.cpp, 6.5 KB (added by anonymous, 9 years ago)
Line 
1// compiled with g++ (Debian 4.7.2-5) 4.7.2 with !g++ -Wall -std=c++11 -O2 -lboost_system -lboost_graph -o boost-test boost-test.cpp
2#include <boost/graph/graphviz.hpp>
3#include <string>
4
5// test_dot[] is from xxd -i test.dot with 0x00 added at the end (to null-terminate)
6// where test.dot is inside #if 0:
7#if 0
8digraph "flow_graph" {
9 graph [
10 ];
11 node [
12 shape = "box"
13 ];
14 edge [
15 ];
16 "0" [
17 label = "_WinMainCRTStartup:\lpush ebp\lmov ebp, esp\lsub esp, 18h\land esp, 0FFFFFFF0h\lmov [esp+18h+var_18], offset _main\lcall _cygwin_crt0\lmov [esp+18h+var_10], 0\lmov [esp+18h+var_14], 0\lmov [esp+18h+var_18], 0\lcall _cygwin_premain0\lmov [esp+18h+var_10], 0\lmov [esp+18h+var_14], 0\lmov [esp+18h+var_18], 0\lcall _cygwin_premain1\lmov [esp+18h+var_10], 0\lmov [esp+18h+var_14], 0\lmov [esp+18h+var_18], 0\lcall _cygwin_premain2\lmov [esp+18h+var_10], 0\lmov [esp+18h+var_14], 0\lmov [esp+18h+var_18], 0\lcall _cygwin_premain3\lleave\lretn\l"
18 ];
19// node 0
20}
21#endif
22unsigned char test_dot[] = {
23 0x64, 0x69, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x22, 0x66, 0x6c, 0x6f,
24 0x77, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x20, 0x7b, 0x0d, 0x0a,
25 0x09, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x5b, 0x0d, 0x0a, 0x09, 0x5d,
26 0x3b, 0x0d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x5b, 0x0d, 0x0a,
27 0x09, 0x09, 0x73, 0x68, 0x61, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x22, 0x62,
28 0x6f, 0x78, 0x22, 0x0d, 0x0a, 0x09, 0x5d, 0x3b, 0x0d, 0x0a, 0x09, 0x65,
29 0x64, 0x67, 0x65, 0x20, 0x5b, 0x0d, 0x0a, 0x09, 0x5d, 0x3b, 0x0d, 0x0a,
30 0x09, 0x22, 0x30, 0x22, 0x20, 0x5b, 0x0d, 0x0a, 0x09, 0x09, 0x6c, 0x61,
31 0x62, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x22, 0x5f, 0x57, 0x69, 0x6e, 0x4d,
32 0x61, 0x69, 0x6e, 0x43, 0x52, 0x54, 0x53, 0x74, 0x61, 0x72, 0x74, 0x75,
33 0x70, 0x3a, 0x5c, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x20, 0x20, 0x20, 0x20,
34 0x65, 0x62, 0x70, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20,
35 0x20, 0x65, 0x62, 0x70, 0x2c, 0x20, 0x65, 0x73, 0x70, 0x5c, 0x6c, 0x73,
36 0x75, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x73, 0x70, 0x2c, 0x20,
37 0x31, 0x38, 0x68, 0x5c, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x20, 0x20, 0x20,
38 0x20, 0x65, 0x73, 0x70, 0x2c, 0x20, 0x30, 0x46, 0x46, 0x46, 0x46, 0x46,
39 0x46, 0x46, 0x30, 0x68, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20,
40 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76,
41 0x61, 0x72, 0x5f, 0x31, 0x38, 0x5d, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73,
42 0x65, 0x74, 0x20, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5c, 0x6c, 0x63, 0x61,
43 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x63, 0x79, 0x67, 0x77, 0x69,
44 0x6e, 0x5f, 0x63, 0x72, 0x74, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20,
45 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68,
46 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x5d, 0x2c, 0x20, 0x30, 0x5c,
47 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73,
48 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34,
49 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20,
50 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76,
51 0x61, 0x72, 0x5f, 0x31, 0x38, 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x63,
52 0x61, 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x63, 0x79, 0x67, 0x77,
53 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5c,
54 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73,
55 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30,
56 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20,
57 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76,
58 0x61, 0x72, 0x5f, 0x31, 0x34, 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x6d,
59 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b,
60 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x38, 0x5d, 0x2c,
61 0x20, 0x30, 0x5c, 0x6c, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x20,
62 0x5f, 0x63, 0x79, 0x67, 0x77, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d,
63 0x61, 0x69, 0x6e, 0x31, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20,
64 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76,
65 0x61, 0x72, 0x5f, 0x31, 0x30, 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x6d,
66 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b,
67 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x34, 0x5d, 0x2c,
68 0x20, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20,
69 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72,
70 0x5f, 0x31, 0x38, 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x63, 0x61, 0x6c,
71 0x6c, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x63, 0x79, 0x67, 0x77, 0x69, 0x6e,
72 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x32, 0x5c, 0x6c, 0x6d,
73 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b,
74 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x30, 0x5d, 0x2c,
75 0x20, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20,
76 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38, 0x68, 0x2b, 0x76, 0x61, 0x72,
77 0x5f, 0x31, 0x34, 0x5d, 0x2c, 0x20, 0x30, 0x5c, 0x6c, 0x6d, 0x6f, 0x76,
78 0x20, 0x20, 0x20, 0x20, 0x20, 0x5b, 0x65, 0x73, 0x70, 0x2b, 0x31, 0x38,
79 0x68, 0x2b, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x38, 0x5d, 0x2c, 0x20, 0x30,
80 0x5c, 0x6c, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x63,
81 0x79, 0x67, 0x77, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x61, 0x69,
82 0x6e, 0x33, 0x5c, 0x6c, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x5c, 0x6c, 0x72,
83 0x65, 0x74, 0x6e, 0x5c, 0x6c, 0x22, 0x0d, 0x0a, 0x09, 0x5d, 0x3b, 0x0d,
84 0x0a, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x30, 0x0d, 0x0a,
85 0x7d, 0x0d, 0x0a
86};
87
88struct flow_graph_t_basic_block_properties
89{
90 std::string label;
91 std::string node_id;
92 int vertex_color;
93};
94
95typedef boost::adjacency_list
96 <boost::listS,
97 boost::listS,
98 boost::bidirectionalS,
99 flow_graph_t_basic_block_properties> flow_graph_t;
100
101typedef flow_graph_t::vertex_descriptor flow_graph_t_basic_block;
102typedef flow_graph_t::edge_descriptor flow_graph_t_branch;
103
104int main(int argc, char** argv)
105{
106 std::string test_dot_str(test_dot, test_dot + sizeof(test_dot));
107 flow_graph_t fg;
108
109 boost::dynamic_properties dp;
110 dp.property("node_id", boost::get(&flow_graph_t_basic_block_properties::node_id, fg));
111 dp.property("label", boost::get(&flow_graph_t_basic_block_properties::label, fg));
112
113 try
114 {
115 if (!boost::read_graphviz(test_dot_str, fg, dp)) {
116 std::cerr << "boost failure (0)" << std::endl;
117 return 0;
118 }
119 } catch (std::exception& e) {
120 std::cerr << "boost failure (1): " << e.what() << std::endl;
121 }
122
123 return 0;
124}