fix for non-byte array byte_extract flattening

This commit is contained in:
Daniel Kroening 2016-08-05 08:30:13 +01:00
parent 0779bbd701
commit 7d78d58028
4 changed files with 41 additions and 2 deletions

View File

@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
^EXIT=0$

View File

@ -0,0 +1,31 @@
#include <assert.h>
#include <stdlib.h>
extern int nondet_int();
int main() {
int arraylen=nondet_int();
if(arraylen==3)
{
int** array_init = malloc(sizeof(int *)*arraylen);
// mis-align that pointer!
char * char_ptr = (char *) array_init;
char_ptr++;
int local_var;
int **array2=(int**)char_ptr;
// write
array2[0]=&local_var;
// check
int value=*array2[0];
assert(value==local_var);
}
}

View File

@ -0,0 +1,8 @@
CORE
main.c
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring

View File

@ -117,7 +117,7 @@ exprt flatten_byte_extract(
for(mp_integer i=0; i<num_elements; ++i)
{
// the most significant byte comes first in the concatenation!
plus_exprt index(first_index, from_integer(i, offset_type));
plus_exprt index(first_index, from_integer(num_elements-i-1, offset_type));
concat.copy_to_operands(index_exprt(root, index));
}