Skip to content
Snippets Groups Projects
Commit cdba1f48 authored by Allan Blanchard's avatar Allan Blanchard
Browse files

[Instantiate] Memset: take of nested typedefs

parent e80dbe06
No related branches found
No related tags found
No related merge requests found
...@@ -63,7 +63,7 @@ let pset_len_bytes_to_value ?loc ptr value bytes_len = ...@@ -63,7 +63,7 @@ let pset_len_bytes_to_value ?loc ptr value bytes_len =
let pset_len_bytes_to_zero ?loc ptr bytes_len = let pset_len_bytes_to_zero ?loc ptr bytes_len =
let eq_value ?loc t = let eq_value ?loc t =
let value = match t.term_type with let value = match Logic_utils.unroll_type t.term_type with
| Ctype(TPtr(_)) -> term Tnull t.term_type | Ctype(TPtr(_)) -> term Tnull t.term_type
| Ctype(TFloat(_)) -> treal ?loc 0. | Ctype(TFloat(_)) -> treal ?loc 0.
| Ctype(TInt(_)) -> tinteger ?loc 0 | Ctype(TInt(_)) -> tinteger ?loc 0
......
#include <string.h>
typedef unsigned t;
struct X { t s_addr; };
void test() {
struct X x;
memset(&x, 0, sizeof(x));
}
[kernel] Parsing tests/string/memset_nested_typedef.c (with preprocessing)
/* Generated by Frama-C */
#include "stddef.h"
#include "string.h"
#include "strings.h"
typedef unsigned int t;
struct X {
t s_addr ;
};
/*@ requires aligned_end: len % 4 ≡ 0;
requires
valid_dest: \let __fc_len = len / 4; \valid(ptr + (0 .. __fc_len - 1));
ensures
set_content:
\let __fc_len = len / 4;
∀ ℤ j0; 0 ≤ j0 < __fc_len ⇒ (ptr + j0)->s_addr ≡ 0;
ensures result: \result ≡ ptr;
assigns *(ptr + (0 .. len / 4 - 1)), \result;
assigns *(ptr + (0 .. len / 4 - 1)) \from \nothing;
assigns \result \from ptr;
*/
struct X *memset_st_X_0(struct X *ptr, size_t len)
{
struct X *__retres;
__retres = (struct X *)memset((void *)ptr,0,len);
return __retres;
}
void test(void)
{
struct X x;
memset_st_X_0(& x,sizeof(x));
return;
}
[kernel] Parsing tests/string/result/memset_nested_typedef.c (with preprocessing)
[kernel] Parsing tests/string/memset_nested_typedef.c (with preprocessing)
[kernel] tests/string/memset_nested_typedef.c:6: Warning:
dropping duplicate def'n of func test at tests/string/memset_nested_typedef.c:6 in favor of that at tests/string/result/memset_nested_typedef.c:28
/* Generated by Frama-C */
#include "stddef.h"
#include "string.h"
#include "strings.h"
typedef unsigned int t;
struct X {
t s_addr ;
};
/*@ requires aligned_end: len % 4 ≡ 0;
requires
valid_dest: \let __fc_len = len / 4; \valid(ptr + (0 .. __fc_len - 1));
ensures
set_content:
\let __fc_len = \old(len) / 4;
∀ ℤ j0; 0 ≤ j0 < __fc_len ⇒ (\old(ptr) + j0)->s_addr ≡ 0;
ensures result: \result ≡ \old(ptr);
assigns *(ptr + (0 .. len / 4 - 1)), \result;
assigns *(ptr + (0 .. len / 4 - 1)) \from \nothing;
assigns \result \from ptr;
*/
struct X *memset_st_X_0(struct X *ptr, size_t len)
{
struct X *__retres;
__retres = (struct X *)memset((void *)ptr,0,len);
return __retres;
}
void test(void)
{
struct X x;
memset_st_X_0(& x,sizeof(x));
return;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment