I have graph as follows:
struct cfg_node
{
iCode *ic;
operand_map_t operands;
std::set alive;
std::set dying;
};
typedef boost::adjacency_list cfg_t;
And a fragment of code:
wassertl (!boost::num_vertices(cfg), "CFG non-empty before creation.");
for (ic = start_ic, i = 0, j = 0; ic; ic = ic->next, i++)
{
boost::add_vertex(cfg);
wassertl (cfg[i].alive.empty(), "Alive set non-empty upon
creation.");
Nothing inside the loop add or deletes vertices or changes the alive
members.
The code works fine on Linux, but I got bug reports from Windows users.
For them the assertion in the loop triggers (and an attempt to insert
something into alive later segfaults).
So I have two questions:
What could be the cause of this problem? Has it been encountered before?
Is the approach of using cfg[i] to get the vertex still correct? I've
used this for some time, but I can't find it in current boost documentation.
Philipp