fix: core dump for some simple circuit
authoryu.dongliang <18588496441@163.com>
Wed, 11 Jun 2025 16:52:01 +0000 (00:52 +0800)
committeryu.dongliang <18588496441@163.com>
Wed, 11 Jun 2025 16:52:01 +0000 (00:52 +0800)
ses_node_analysis.c

index 3bac660aaca8ab9bd69f324e329d8abafc3ded74..e8ddc769bc908728e88a1f5dc7f4e27928f46359 100644 (file)
@@ -1065,6 +1065,8 @@ static int __ses_nodes_split(scf_vector_t* groups, scf_vector_t* nodes, scf_vect
        ses_group_t* g;
        ses_node_t*  node;
        ses_edge_t*  edge;
+       int i;
+       int j;
 
        if (nodes->size <= 0)
                return 0;
@@ -1085,8 +1087,6 @@ static int __ses_nodes_split(scf_vector_t* groups, scf_vector_t* nodes, scf_vect
 
                assert(0 == scf_vector_del(nodes, node));
 
-               int i;
-               int j;
                for (i = 0; i < g->nodes->size; i++) {
                        node      = g->nodes->data[i];
 
@@ -1140,7 +1140,13 @@ static int __ses_nodes_split(scf_vector_t* groups, scf_vector_t* nodes, scf_vect
        }
 
        assert(0 == nodes->size);
-       assert(0 == edges->size);
+
+       for (i = 0; i < edges->size; i++) {
+               edge      = edges->data[i];
+
+               edge->index = i;
+       }
+
        return 0;
 }
 
@@ -1162,13 +1168,6 @@ int __ses_nodes_paths_solve(ScfEfunction* f, scf_vector_t* paths, int* changed,
        if (ret < 0)
                goto error;
 
-       if (0 == nodes->size) {
-               ses_edges_print(edges);
-
-               ret = __ses_nodes_solve(f, nodes, edges, changed, ps, count);
-               goto error;
-       }
-
        ret = __ses_nodes_split(groups, nodes, edges);
        if (ret < 0)
                goto error;
@@ -1184,6 +1183,13 @@ int __ses_nodes_paths_solve(ScfEfunction* f, scf_vector_t* paths, int* changed,
                        goto error;
        }
 
+       if (edges->size > 0) {
+               ses_edges_print(edges);
+
+               ret = __ses_nodes_solve(f, nodes, edges, changed, ps, count);
+               goto error;
+       }
+
 error:
        scf_vector_clear(nodes,  (void (*)(void*) )ses_node_free);
        scf_vector_clear(edges,  (void (*)(void*) )ses_edge_free);