digraph g {
    enter [style = filled];
    mxin [label = "x = x_in", style = filled];
    try [style = filled];
    x_in [label = "x_in = x", style = filled];
    f [label = "f()", style = filled];
    nr [label = "normal return"];
    x_out_nr [label = "x = x_out"];
    er [label = "error return"];
    catch [label = "catch (Exception e)"];
    x_out_catch [label = "x = x_out"];
    log [label = "log(\"error\")"];
    x_0 [label = "x = 0", style = filled];
    x_in2 [label = "x_in = x", style = filled];
    f2 [label = "f()", style = filled];
    nr2 [label = "normal return"];
    er2 [label = "error return"];
    ee [label = "error exit"];
    x_out_nr2 [label = "x = x_out"];
    x_out_ee [label = "x = x_out"];

    enter -> {mxin try};
    try -> f -> {x_in nr er}
    nr -> x_out_nr
    er -> catch -> {x_out_catch log}
    enter -> {x_0 f2}
    f2 -> {x_in2 nr2 er2}
    nr2 -> x_out_nr2
    er2 -> ee -> x_out_ee; 

    {edge [color = red, constraint = false];
        mxin -> x_in;
        x_0 -> x_in2;
    }

    {edge [color = blue, constraint = false];
    x_in -> {x_out_nr x_out_catch}
    x_in2 -> {x_out_nr2 x_out_ee}
    }
}