File tree 7 files changed +39
-12
lines changed
address_space_size_limit2
7 files changed +39
-12
lines changed Original file line number Diff line number Diff line change 1
- #include <stdlib.h>
1
+ void * malloc ( __CPROVER_size_t );
2
2
3
3
typedef union
4
4
{
Original file line number Diff line number Diff line change 1
- #include <stdlib.h>
1
+ void * malloc ( __CPROVER_size_t );
2
2
3
3
typedef union
4
4
{
Original file line number Diff line number Diff line change
1
+ int main (int argc , char * argv [])
2
+ {
3
+ __CPROVER_assert (sizeof (unsigned int ) == 2 , "[--16] size of int is 16 bit" );
4
+ __CPROVER_assert (
5
+ sizeof (unsigned long ) == 4 , "[--LP32] size of long is 32 bit" );
6
+
7
+ unsigned int k = non_det_unsigned ();
8
+ __CPROVER_assume (k < 1 );
9
+ __CPROVER_assert (k != 0xffff , "false counter example 16Bit?" );
10
+
11
+ return 0 ;
12
+ }
Original file line number Diff line number Diff line change
1
+ CORE
2
+ main.c
3
+ --16
4
+ ^EXIT=0$
5
+ ^SIGNAL=0$
6
+ ^VERIFICATION SUCCESSFUL$
7
+ --
8
+ ^warning: ignoring
Original file line number Diff line number Diff line change 1
- #include <stdlib.h>
2
1
#include <assert.h>
3
2
3
+ void * malloc (__CPROVER_size_t );
4
+
4
5
int main (int argc , char * * argv )
5
6
{
6
7
char * c = (char * )malloc (10 );
Original file line number Diff line number Diff line change @@ -437,13 +437,20 @@ bool c_preprocess_visual_studio(
437
437
// yes, both _WIN32 and _WIN64 get defined
438
438
command_file << " /D_WIN64" << " \n " ;
439
439
}
440
+ else if (config.ansi_c .int_width == 16 && config.ansi_c .pointer_width == 32 )
441
+ {
442
+ // 16-bit LP32 is an artificial architecture we simulate when using --16
443
+ DATA_INVARIANT (
444
+ pointer_diff_type () == signed_long_int_type (),
445
+ " Pointer difference expected to be long int typed" );
446
+ command_file << " /D__PTRDIFF_TYPE__=long" << ' \n ' ;
447
+ }
440
448
else
441
449
{
442
450
DATA_INVARIANT (
443
451
pointer_diff_type ()==signed_int_type (),
444
452
" Pointer difference expected to be int typed" );
445
453
command_file << " /D__PTRDIFF_TYPE__=int" << " \n " ;
446
- command_file << " /U_WIN64" << " \n " ;
447
454
}
448
455
449
456
if (config.ansi_c .char_is_unsigned )
Original file line number Diff line number Diff line change @@ -418,16 +418,15 @@ c_typecastt::c_typet c_typecastt::minimum_promotion(
418
418
c_typet max_type=std::max (c_type, INT); // minimum promotion
419
419
420
420
// The second case can arise if we promote any unsigned type
421
- // that is as large as unsigned int.
422
-
423
- if (config.ansi_c .short_int_width ==config.ansi_c .int_width &&
424
- max_type==USHORT)
421
+ // that is as large as unsigned int. In this case the promotion configuration
422
+ // via the enum is actually wrong, and we need to fix this up.
423
+ if (
424
+ config.ansi_c .short_int_width == config.ansi_c .int_width &&
425
+ c_type == USHORT)
425
426
max_type=UINT;
426
- else if (config. ansi_c . char_width ==config. ansi_c . int_width &&
427
- max_type== UCHAR)
427
+ else if (
428
+ config. ansi_c . char_width == config. ansi_c . int_width && c_type == UCHAR)
428
429
max_type=UINT;
429
- else
430
- max_type=std::max (max_type, INT);
431
430
432
431
if (max_type==UINT &&
433
432
type.id ()==ID_c_bit_field &&
You can’t perform that action at this time.
0 commit comments