@@ -302,6 +302,7 @@ bool generate_ansi_c_start_function(
302
302
}
303
303
304
304
const symbolt &argv_symbol=ns.lookup (" argv'" );
305
+ const array_typet &argv_array_type = to_array_type (argv_symbol.type );
305
306
306
307
{
307
308
// Assume argc is at least zero. Note that we don't assume it's
@@ -405,10 +406,12 @@ bool generate_ansi_c_start_function(
405
406
{
406
407
// assign argv[argc] to NULL
407
408
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 ()));
409
410
410
411
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 ()));
412
415
413
416
init_code.add (code_frontend_assignt (index_expr, null));
414
417
// disable bounds check on that one
@@ -419,14 +422,17 @@ bool generate_ansi_c_start_function(
419
422
if (parameters.size ()==3 )
420
423
{
421
424
const symbolt &envp_symbol=ns.lookup (" envp'" );
425
+ const array_typet &envp_array_type = to_array_type (envp_symbol.type );
422
426
const symbolt &envp_size_symbol=ns.lookup (" envp_size'" );
423
427
424
428
// assume envp[envp_size] is NULL
425
429
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 ()));
427
431
428
432
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 ()));
430
436
431
437
equal_exprt is_null (std::move (index_expr), std::move (null));
432
438
@@ -452,7 +458,8 @@ bool generate_ansi_c_start_function(
452
458
453
459
{
454
460
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 ()));
456
463
// disable bounds check on that one
457
464
index_expr.add_source_location ().add_pragma (" disable:bounds-check" );
458
465
@@ -467,9 +474,11 @@ bool generate_ansi_c_start_function(
467
474
if (parameters.size ()==3 )
468
475
{
469
476
const symbolt &envp_symbol=ns.lookup (" envp'" );
477
+ const array_typet &envp_array_type = to_array_type (envp_symbol.type );
470
478
471
479
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 ()));
473
482
474
483
const pointer_typet &pointer_type =
475
484
to_pointer_type (parameters[2 ].type ());
0 commit comments