@@ -302,6 +302,7 @@ bool generate_ansi_c_start_function(
302302 }
303303
304304 const symbolt &argv_symbol=ns.lookup (" argv'" );
305+ const array_typet &argv_array_type = to_array_type (argv_symbol.type );
305306
306307 {
307308 // Assume argc is at least zero. Note that we don't assume it's
@@ -405,10 +406,12 @@ bool generate_ansi_c_start_function(
405406 {
406407 // assign argv[argc] to NULL
407408 const null_pointer_exprt null (
408- to_pointer_type (to_array_type (argv_symbol. type ) .element_type ()));
409+ to_pointer_type (argv_array_type .element_type ()));
409410
410411 index_exprt index_expr (
411- argv_symbol.symbol_expr (), argc_symbol.symbol_expr ());
412+ argv_symbol.symbol_expr (),
413+ typecast_exprt::conditional_cast (
414+ argc_symbol.symbol_expr (), argv_array_type.index_type ()));
412415
413416 init_code.add (code_frontend_assignt (index_expr, null));
414417 // disable bounds check on that one
@@ -419,14 +422,17 @@ bool generate_ansi_c_start_function(
419422 if (parameters.size ()==3 )
420423 {
421424 const symbolt &envp_symbol=ns.lookup (" envp'" );
425+ const array_typet &envp_array_type = to_array_type (envp_symbol.type );
422426 const symbolt &envp_size_symbol=ns.lookup (" envp_size'" );
423427
424428 // assume envp[envp_size] is NULL
425429 null_pointer_exprt null (
426- to_pointer_type (to_array_type (envp_symbol. type ) .element_type ()));
430+ to_pointer_type (envp_array_type .element_type ()));
427431
428432 index_exprt index_expr (
429- envp_symbol.symbol_expr (), envp_size_symbol.symbol_expr ());
433+ envp_symbol.symbol_expr (),
434+ typecast_exprt::conditional_cast (
435+ envp_size_symbol.symbol_expr (), envp_array_type.index_type ()));
430436
431437 equal_exprt is_null (std::move (index_expr), std::move (null));
432438
@@ -452,7 +458,8 @@ bool generate_ansi_c_start_function(
452458
453459 {
454460 index_exprt index_expr (
455- argv_symbol.symbol_expr (), from_integer (0 , c_index_type ()));
461+ argv_symbol.symbol_expr (),
462+ from_integer (0 , argv_array_type.index_type ()));
456463 // disable bounds check on that one
457464 index_expr.add_source_location ().add_pragma (" disable:bounds-check" );
458465
@@ -467,9 +474,11 @@ bool generate_ansi_c_start_function(
467474 if (parameters.size ()==3 )
468475 {
469476 const symbolt &envp_symbol=ns.lookup (" envp'" );
477+ const array_typet &envp_array_type = to_array_type (envp_symbol.type );
470478
471479 index_exprt index_expr (
472- envp_symbol.symbol_expr (), from_integer (0 , c_index_type ()));
480+ envp_symbol.symbol_expr (),
481+ from_integer (0 , envp_array_type.index_type ()));
473482
474483 const pointer_typet &pointer_type =
475484 to_pointer_type (parameters[2 ].type ());
0 commit comments