@@ -2212,40 +2212,36 @@ void update_instance_parameter_table(ast_node_t* instance, STRING_CACHE* instanc
2212
2212
char * param_id = parameter_override_list->children [j]->children [0 ]->types .identifier ;
2213
2213
sc_spot = sc_lookup_string (instance_param_table_sc, param_id);
2214
2214
if (sc_spot == -1 ) {
2215
- error_message (AST, parameter_override_list->loc ,
2216
- " Can't find parameter name %s in module %s\n " ,
2217
- param_id, instance->children [0 ]->types .identifier );
2215
+ warning_message (AST, parameter_override_list->loc ,
2216
+ " Can't find parameter name %s in module %s\n " ,
2217
+ param_id, instance->children [0 ]->types .identifier );
2218
2218
} else {
2219
- /* update this parameter and remove all other overrides with this name */
2220
- free_whole_tree (((ast_node_t *)instance_param_table_sc->data [sc_spot]));
2221
- instance_param_table_sc->data [sc_spot] = (void *)parameter_override_list->children [j]->children [5 ];
2222
- parameter_override_list->children [j]->children [5 ] = NULL ;
2219
+ ast_node_t * param_node = (ast_node_t *)instance_param_table_sc->data [sc_spot];
2220
+ if (param_node == NULL ) {
2221
+ instance_param_table_sc->data [sc_spot] = (void *)parameter_override_list->children [j]->children [5 ];
2222
+ } else if (!param_node->types .variable .is_parameter ) {
2223
+ warning_message (AST, parameter_override_list->loc ,
2224
+ " Defparam can only override parameters: %s\n " ,
2225
+ parameter_override_list->children [j]->children [0 ]->types .identifier );
2226
+ } else {
2227
+ /* update this parameter and remove all other overrides with this name */
2228
+ free_whole_tree (((ast_node_t *)instance_param_table_sc->data [sc_spot]));
2229
+ instance_param_table_sc->data [sc_spot] = (void *)parameter_override_list->children [j]->children [5 ];
2230
+ parameter_override_list->children [j]->children [5 ] = NULL ;
2231
+ }
2223
2232
2224
2233
for (int k = 0 ; k < j; k++) {
2225
2234
if (!strcmp (parameter_override_list->children [k]->children [0 ]->types .identifier , param_id)) {
2226
- /* *
2227
- * TODO: is this needed?
2228
- * ast_node_t* temp = parameter_override_list->children[k];
2229
- * */
2230
2235
remove_child_from_node_at_index (parameter_override_list, k);
2231
- // temp = NULL;
2232
2236
j--;
2233
2237
k--;
2234
2238
}
2235
2239
}
2236
- /* *
2237
- * TODO: is this needed?
2238
- * ast_node_t* temp = parameter_override_list->children[j];
2239
- * */
2240
2240
remove_child_from_node_at_index (parameter_override_list, j);
2241
- // temp = NULL;
2242
2241
}
2243
2242
}
2244
2243
// check if there are still overrides in the list that haven't been deleted
2245
-
2246
- if (parameter_override_list->num_children > 0 ) {
2247
- oassert (false ); // not reachable???
2248
- }
2244
+ oassert (parameter_override_list->num_children == 0 );
2249
2245
}
2250
2246
}
2251
2247
0 commit comments