@@ -893,9 +893,14 @@ void alloc_timing_driven_route_structs(float** pin_criticality_ptr,
893
893
894
894
int max_sinks = std::max (get_max_pins_per_net () - 1 , 0 );
895
895
896
- *pin_criticality_ptr = new float [max_sinks] - 1 ; /* First sink is pin #1. */
897
- *sink_order_ptr = new int [max_sinks] - 1 ;
898
- *rt_node_of_sink_ptr = new t_rt_node*[max_sinks] - 1 ;
896
+ *pin_criticality_ptr = new float [max_sinks + 1 ]; /* First sink is pin #1.*/
897
+ *sink_order_ptr = new int [max_sinks + 1 ];
898
+ *rt_node_of_sink_ptr = new t_rt_node*[max_sinks + 1 ];
899
+
900
+ /* Element 0 should be an invalid value so we are likely to crash if we accidentally use it. */
901
+ (*pin_criticality_ptr)[0 ] = -1 ;
902
+ (*sink_order_ptr)[0 ] = -1 ;
903
+ (*rt_node_of_sink_ptr)[0 ] = nullptr ;
899
904
900
905
alloc_route_tree_timing_structs ();
901
906
}
@@ -908,11 +913,11 @@ void free_timing_driven_route_structs(float* pin_criticality, int* sink_order, t
908
913
/* Frees all the structures needed only by the timing-driven router. */
909
914
910
915
// coverity[offset_free : Intentional]
911
- delete[] (pin_criticality + 1 ); /* Starts at index 1. */
916
+ delete[] (pin_criticality);
912
917
// coverity[offset_free : Intentional]
913
- delete[] (sink_order + 1 );
918
+ delete[] (sink_order);
914
919
// coverity[offset_free : Intentional]
915
- delete[] (rt_node_of_sink + 1 );
920
+ delete[] (rt_node_of_sink);
916
921
917
922
free_route_tree_timing_structs ();
918
923
}
0 commit comments