Example: pointer_copy_user_dataflow_direct_bytewise_struct.c

#include <stdio.h>
#include <string.h>
typedef struct { int i; float f; } st;
st s1 = {.i=1, .f=1.0 };
st s2;
void user_memcpy(unsigned char* dest,
unsigned char *src, size_t n) {
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
}
int main() {
st *p = &s1;
st *q = &s2;
user_memcpy((unsigned char*)q,
(unsigned char*)p, sizeof(st));
// is this free of undefined behaviour?
printf("p->i = %d q->i = %d\n",p->i,q->i);
}
[link to test in Cerberus and Compiler Explorer]

Experimental data (what does this mean?)

gcc-8.1-O0 p->i = 1 q->i = 1
gcc-8.1-O2 p->i = 1 q->i = 1
gcc-8.1-O3 p->i = 1 q->i = 1
gcc-8.1-O2-no-strict-aliasing p->i = 1 q->i = 1
gcc-8.1-O3-no-strict-aliasing p->i = 1 q->i = 1
clang-6.0-O0 p->i = 1 q->i = 1
clang-6.0-O2 p->i = 1 q->i = 1
clang-6.0-O3 p->i = 1 q->i = 1
clang-6.0-O2-no-strict-aliasing p->i = 1 q->i = 1
clang-6.0-O3-no-strict-aliasing p->i = 1 q->i = 1
clang-6.0-UBSAN p->i = 1 q->i = 1
clang-6.0-ASAN p->i = 1 q->i = 1
clang-6.0-MSAN p->i = 1 q->i = 1
icc-19-O0 p->i = 1 q->i = 1
icc-19-O2 p->i = 1 q->i = 1
icc-19-O3 p->i = 1 q->i = 1
icc-19-O2-no-strict-aliasing p->i = 1 q->i = 1
icc-19-O3-no-strict-aliasing p->i = 1 q->i = 1
cerberus-concrete BEGIN EXEC[0]
Defined {value: "Specified(0)", stdout: "p->i = 1 q->i = 1\n", blocked: "false"}
END EXEC[0]
Time spent: 0.046866 seconds
cerberus-symbolic exit codes: compile 0 / execute 1 BOGUS!!!!
BOGUS!!!!
cerberus: internal error, uncaught exception:
Failure("TODO: Symbolic defacto, isWellAligned_ptrval")

gcc-4.9-shadowprov p->i = 1 q->i = 1
CHERI:MIPS-O0 p->i = 1 q->i = 1
CHERI:MIPS-O2 p->i = 1 q->i = 1
CHERI:MIPS-O2-no-strict-aliasing p->i = 1 q->i = 1
CHERI:CHERI-O0-uintcap-addr-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O2-uintcap-addr-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O2-no-strict-aliasing-uintcap-addr-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O0-uintcap-offset-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O2-uintcap-offset-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O2-no-strict-aliasing-uintcap-offset-exact-equals p->i = 1 q->i = 1
CHERI:CHERI-O0-uintcap-addr p->i = 1 q->i = 1
CHERI:CHERI-O2-uintcap-addr p->i = 1 q->i = 1
CHERI:CHERI-O2-no-strict-aliasing-uintcap-addr p->i = 1 q->i = 1
CHERI:CHERI-O0-uintcap-offset p->i = 1 q->i = 1
CHERI:CHERI-O2-uintcap-offset p->i = 1 q->i = 1
CHERI:CHERI-O2-no-strict-aliasing-uintcap-offset p->i = 1 q->i = 1
RV-Match p->i = 1 q->i = 1
ch2o Fatal error: exception Main.Unknown_specifier(_)
Raised at file "bytes.ml", line 220, characters 25-34
Called from file "ratio.ml", line 553, characters 12-30
compcert-3.2 p->i = 1 q->i = 1
compcert-3.2-O p->i = 1 q->i = 1
compcert-3.2-interp Time 0: calling main()
--[step_internal_function]-->
Time 1: in function main, statement
p = &s1;
q = &s2;
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692));
printf(__stringlit_1, ((*.)).i, ((*.)).i);
return 0;
--[step_seq]-->
Time 2: in function main, statement
p = &s1;
q = &s2;
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692));
printf(__stringlit_1, ((*.)).i, ((*.)).i);
--[step_seq]-->
Time 3: in function main, statement p = &s1;
--[step_do_1]-->
Time 4: in function main, expression p = &s1
--[red_var_local]-->
Time 5: in function main, expression <loc p> = &s1
--[red_var_global]-->
Time 6: in function main, expression <loc p> = &<loc s1>
--[red_addrof]-->
Time 7: in function main, expression <loc p> = <ptr s1>
--[red_assign]-->
Time 8: in function main, expression <ptr s1>
--[step_do_2]-->
Time 9: in function main, statement /*skip*/;
--[step_skip_seq]-->
Time 10: in function main, statement
q = &s2;
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692));
printf(__stringlit_1, ((*.)).i, ((*.)).i);
--[step_seq]-->
Time 11: in function main, statement q = &s2;
--[step_do_1]-->
Time 12: in function main, expression q = &s2
--[red_var_local]-->
Time 13: in function main, expression <loc q> = &s2
--[red_var_global]-->
Time 14: in function main, expression <loc q> = &<loc s2>
--[red_addrof]-->
Time 15: in function main, expression <loc q> = <ptr s2>
--[red_assign]-->
Time 16: in function main, expression <ptr s2>
--[step_do_2]-->
Time 17: in function main, statement /*skip*/;
--[step_skip_seq]-->
Time 18: in function main, statement
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692));
printf(__stringlit_1, ((*.)).i, ((*.)).i);
--[step_seq]-->
Time 19: in function main, statement
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692));
--[step_do_1]-->
Time 20: in function main, expression
user_memcpy((unsigned char *) q, (unsigned char *) p, sizeof(struct _692))
--[red_var_global]-->
Time 21: in function main, expression
<loc user_memcpy>((unsigned char *) q,
(unsigned char *) p,
sizeof(struct _692))
--[red_rvalof]-->
Time 22: in function main, expression
<ptr user_memcpy>((unsigned char *) q,
(unsigned char *) p,
sizeof(struct _692))
--[red_var_local]-->
Time 23: in function main, expression
<ptr user_memcpy>((unsigned char *) <loc q>,
(unsigned char *) p,
sizeof(struct _692))
--[red_rvalof]-->
Time 24: in function main, expression
<ptr user_memcpy>((unsigned char *) <ptr s2>,
(unsigned char *) p,
sizeof(struct _692))
--[red_cast]-->
Time 25: in function main, expression
<ptr user_memcpy>(<ptr s2>, (unsigned char *) p, sizeof(struct _692))
--[red_var_local]-->
Time 26: in function main, expression
<ptr user_memcpy>(<ptr s2>, (unsigned char *) <loc p>, sizeof(struct _692))
--[red_rvalof]-->
Time 27: in function main, expression
<ptr user_memcpy>(<ptr s2>, (unsigned char *) <ptr s1>,
sizeof(struct _692))
--[red_cast]-->
Time 28: in function main, expression
<ptr user_memcpy>(<ptr s2>, <ptr s1>, sizeof(struct _692))
--[red_sizeof]-->
Time 29: in function main, expression
<ptr user_memcpy>(<ptr s2>, <ptr s1>, 8U)
--[red_call]-->
Time 30: calling user_memcpy(<ptr s2>, <ptr s1>, 8)
--[step_internal_function]-->
Time 31: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 32: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 33: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 34: in function user_memcpy, expression 8U > 0
--[red_binop]-->
Time 35: in function user_memcpy, expression 1
--[step_while_true]-->
Time 36: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 37: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 38: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 39: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 40: in function user_memcpy, expression *<ptr s2> = *src
--[red_deref]-->
Time 41: in function user_memcpy, expression <loc s2> = *src
--[red_var_local]-->
Time 42: in function user_memcpy, expression <loc s2> = *<loc src>
--[red_rvalof]-->
Time 43: in function user_memcpy, expression <loc s2> = *<ptr s1>
--[red_deref]-->
Time 44: in function user_memcpy, expression <loc s2> = <loc s1>
--[red_rvalof]-->
Time 45: in function user_memcpy, expression <loc s2> = 1
--[red_assign]-->
Time 46: in function user_memcpy, expression 1
--[step_do_2]-->
Time 47: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 48: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 49: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 50: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 51: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 52: in function user_memcpy, expression <loc src> = <ptr s1> + 1
--[red_binop]-->
Time 53: in function user_memcpy, expression <loc src> = <ptr s1+1>
--[red_assign]-->
Time 54: in function user_memcpy, expression <ptr s1+1>
--[step_do_2]-->
Time 55: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 56: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 57: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 58: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 59: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 60: in function user_memcpy, expression <loc dest> = <ptr s2> + 1
--[red_binop]-->
Time 61: in function user_memcpy, expression <loc dest> = <ptr s2+1>
--[red_assign]-->
Time 62: in function user_memcpy, expression <ptr s2+1>
--[step_do_2]-->
Time 63: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 64: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 65: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 66: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 67: in function user_memcpy, expression <loc n> = 8U - 1
--[red_binop]-->
Time 68: in function user_memcpy, expression <loc n> = 7U
--[red_assign]-->
Time 69: in function user_memcpy, expression 7U
--[step_do_2]-->
Time 70: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 71: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 72: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 73: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 74: in function user_memcpy, expression 7U > 0
--[red_binop]-->
Time 75: in function user_memcpy, expression 1
--[step_while_true]-->
Time 76: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 77: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 78: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 79: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 80: in function user_memcpy, expression *<ptr s2+1> = *src
--[red_deref]-->
Time 81: in function user_memcpy, expression <loc s2+1> = *src
--[red_var_local]-->
Time 82: in function user_memcpy, expression <loc s2+1> = *<loc src>
--[red_rvalof]-->
Time 83: in function user_memcpy, expression <loc s2+1> = *<ptr s1+1>
--[red_deref]-->
Time 84: in function user_memcpy, expression <loc s2+1> = <loc s1+1>
--[red_rvalof]-->
Time 85: in function user_memcpy, expression <loc s2+1> = 0
--[red_assign]-->
Time 86: in function user_memcpy, expression 0
--[step_do_2]-->
Time 87: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 88: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 89: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 90: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 91: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 92: in function user_memcpy, expression <loc src> = <ptr s1+1> + 1
--[red_binop]-->
Time 93: in function user_memcpy, expression <loc src> = <ptr s1+2>
--[red_assign]-->
Time 94: in function user_memcpy, expression <ptr s1+2>
--[step_do_2]-->
Time 95: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 96: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 97: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 98: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 99: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 100: in function user_memcpy, expression <loc dest> = <ptr s2+1> + 1
--[red_binop]-->
Time 101: in function user_memcpy, expression <loc dest> = <ptr s2+2>
--[red_assign]-->
Time 102: in function user_memcpy, expression <ptr s2+2>
--[step_do_2]-->
Time 103: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 104: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 105: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 106: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 107: in function user_memcpy, expression <loc n> = 7U - 1
--[red_binop]-->
Time 108: in function user_memcpy, expression <loc n> = 6U
--[red_assign]-->
Time 109: in function user_memcpy, expression 6U
--[step_do_2]-->
Time 110: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 111: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 112: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 113: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 114: in function user_memcpy, expression 6U > 0
--[red_binop]-->
Time 115: in function user_memcpy, expression 1
--[step_while_true]-->
Time 116: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 117: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 118: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 119: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 120: in function user_memcpy, expression *<ptr s2+2> = *src
--[red_deref]-->
Time 121: in function user_memcpy, expression <loc s2+2> = *src
--[red_var_local]-->
Time 122: in function user_memcpy, expression <loc s2+2> = *<loc src>
--[red_rvalof]-->
Time 123: in function user_memcpy, expression <loc s2+2> = *<ptr s1+2>
--[red_deref]-->
Time 124: in function user_memcpy, expression <loc s2+2> = <loc s1+2>
--[red_rvalof]-->
Time 125: in function user_memcpy, expression <loc s2+2> = 0
--[red_assign]-->
Time 126: in function user_memcpy, expression 0
--[step_do_2]-->
Time 127: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 128: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 129: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 130: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 131: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 132: in function user_memcpy, expression <loc src> = <ptr s1+2> + 1
--[red_binop]-->
Time 133: in function user_memcpy, expression <loc src> = <ptr s1+3>
--[red_assign]-->
Time 134: in function user_memcpy, expression <ptr s1+3>
--[step_do_2]-->
Time 135: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 136: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 137: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 138: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 139: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 140: in function user_memcpy, expression <loc dest> = <ptr s2+2> + 1
--[red_binop]-->
Time 141: in function user_memcpy, expression <loc dest> = <ptr s2+3>
--[red_assign]-->
Time 142: in function user_memcpy, expression <ptr s2+3>
--[step_do_2]-->
Time 143: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 144: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 145: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 146: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 147: in function user_memcpy, expression <loc n> = 6U - 1
--[red_binop]-->
Time 148: in function user_memcpy, expression <loc n> = 5U
--[red_assign]-->
Time 149: in function user_memcpy, expression 5U
--[step_do_2]-->
Time 150: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 151: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 152: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 153: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 154: in function user_memcpy, expression 5U > 0
--[red_binop]-->
Time 155: in function user_memcpy, expression 1
--[step_while_true]-->
Time 156: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 157: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 158: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 159: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 160: in function user_memcpy, expression *<ptr s2+3> = *src
--[red_deref]-->
Time 161: in function user_memcpy, expression <loc s2+3> = *src
--[red_var_local]-->
Time 162: in function user_memcpy, expression <loc s2+3> = *<loc src>
--[red_rvalof]-->
Time 163: in function user_memcpy, expression <loc s2+3> = *<ptr s1+3>
--[red_deref]-->
Time 164: in function user_memcpy, expression <loc s2+3> = <loc s1+3>
--[red_rvalof]-->
Time 165: in function user_memcpy, expression <loc s2+3> = 0
--[red_assign]-->
Time 166: in function user_memcpy, expression 0
--[step_do_2]-->
Time 167: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 168: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 169: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 170: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 171: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 172: in function user_memcpy, expression <loc src> = <ptr s1+3> + 1
--[red_binop]-->
Time 173: in function user_memcpy, expression <loc src> = <ptr s1+4>
--[red_assign]-->
Time 174: in function user_memcpy, expression <ptr s1+4>
--[step_do_2]-->
Time 175: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 176: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 177: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 178: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 179: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 180: in function user_memcpy, expression <loc dest> = <ptr s2+3> + 1
--[red_binop]-->
Time 181: in function user_memcpy, expression <loc dest> = <ptr s2+4>
--[red_assign]-->
Time 182: in function user_memcpy, expression <ptr s2+4>
--[step_do_2]-->
Time 183: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 184: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 185: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 186: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 187: in function user_memcpy, expression <loc n> = 5U - 1
--[red_binop]-->
Time 188: in function user_memcpy, expression <loc n> = 4U
--[red_assign]-->
Time 189: in function user_memcpy, expression 4U
--[step_do_2]-->
Time 190: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 191: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 192: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 193: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 194: in function user_memcpy, expression 4U > 0
--[red_binop]-->
Time 195: in function user_memcpy, expression 1
--[step_while_true]-->
Time 196: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 197: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 198: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 199: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 200: in function user_memcpy, expression *<ptr s2+4> = *src
--[red_deref]-->
Time 201: in function user_memcpy, expression <loc s2+4> = *src
--[red_var_local]-->
Time 202: in function user_memcpy, expression <loc s2+4> = *<loc src>
--[red_rvalof]-->
Time 203: in function user_memcpy, expression <loc s2+4> = *<ptr s1+4>
--[red_deref]-->
Time 204: in function user_memcpy, expression <loc s2+4> = <loc s1+4>
--[red_rvalof]-->
Time 205: in function user_memcpy, expression <loc s2+4> = 0
--[red_assign]-->
Time 206: in function user_memcpy, expression 0
--[step_do_2]-->
Time 207: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 208: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 209: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 210: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 211: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 212: in function user_memcpy, expression <loc src> = <ptr s1+4> + 1
--[red_binop]-->
Time 213: in function user_memcpy, expression <loc src> = <ptr s1+5>
--[red_assign]-->
Time 214: in function user_memcpy, expression <ptr s1+5>
--[step_do_2]-->
Time 215: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 216: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 217: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 218: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 219: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 220: in function user_memcpy, expression <loc dest> = <ptr s2+4> + 1
--[red_binop]-->
Time 221: in function user_memcpy, expression <loc dest> = <ptr s2+5>
--[red_assign]-->
Time 222: in function user_memcpy, expression <ptr s2+5>
--[step_do_2]-->
Time 223: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 224: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 225: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 226: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 227: in function user_memcpy, expression <loc n> = 4U - 1
--[red_binop]-->
Time 228: in function user_memcpy, expression <loc n> = 3U
--[red_assign]-->
Time 229: in function user_memcpy, expression 3U
--[step_do_2]-->
Time 230: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 231: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 232: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 233: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 234: in function user_memcpy, expression 3U > 0
--[red_binop]-->
Time 235: in function user_memcpy, expression 1
--[step_while_true]-->
Time 236: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 237: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 238: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 239: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 240: in function user_memcpy, expression *<ptr s2+5> = *src
--[red_deref]-->
Time 241: in function user_memcpy, expression <loc s2+5> = *src
--[red_var_local]-->
Time 242: in function user_memcpy, expression <loc s2+5> = *<loc src>
--[red_rvalof]-->
Time 243: in function user_memcpy, expression <loc s2+5> = *<ptr s1+5>
--[red_deref]-->
Time 244: in function user_memcpy, expression <loc s2+5> = <loc s1+5>
--[red_rvalof]-->
Time 245: in function user_memcpy, expression <loc s2+5> = 0
--[red_assign]-->
Time 246: in function user_memcpy, expression 0
--[step_do_2]-->
Time 247: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 248: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 249: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 250: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 251: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 252: in function user_memcpy, expression <loc src> = <ptr s1+5> + 1
--[red_binop]-->
Time 253: in function user_memcpy, expression <loc src> = <ptr s1+6>
--[red_assign]-->
Time 254: in function user_memcpy, expression <ptr s1+6>
--[step_do_2]-->
Time 255: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 256: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 257: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 258: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 259: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 260: in function user_memcpy, expression <loc dest> = <ptr s2+5> + 1
--[red_binop]-->
Time 261: in function user_memcpy, expression <loc dest> = <ptr s2+6>
--[red_assign]-->
Time 262: in function user_memcpy, expression <ptr s2+6>
--[step_do_2]-->
Time 263: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 264: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 265: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 266: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 267: in function user_memcpy, expression <loc n> = 3U - 1
--[red_binop]-->
Time 268: in function user_memcpy, expression <loc n> = 2U
--[red_assign]-->
Time 269: in function user_memcpy, expression 2U
--[step_do_2]-->
Time 270: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 271: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 272: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 273: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 274: in function user_memcpy, expression 2U > 0
--[red_binop]-->
Time 275: in function user_memcpy, expression 1
--[step_while_true]-->
Time 276: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 277: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 278: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 279: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 280: in function user_memcpy, expression *<ptr s2+6> = *src
--[red_deref]-->
Time 281: in function user_memcpy, expression <loc s2+6> = *src
--[red_var_local]-->
Time 282: in function user_memcpy, expression <loc s2+6> = *<loc src>
--[red_rvalof]-->
Time 283: in function user_memcpy, expression <loc s2+6> = *<ptr s1+6>
--[red_deref]-->
Time 284: in function user_memcpy, expression <loc s2+6> = <loc s1+6>
--[red_rvalof]-->
Time 285: in function user_memcpy, expression <loc s2+6> = 128
--[red_assign]-->
Time 286: in function user_memcpy, expression 128
--[step_do_2]-->
Time 287: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 288: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 289: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 290: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 291: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 292: in function user_memcpy, expression <loc src> = <ptr s1+6> + 1
--[red_binop]-->
Time 293: in function user_memcpy, expression <loc src> = <ptr s1+7>
--[red_assign]-->
Time 294: in function user_memcpy, expression <ptr s1+7>
--[step_do_2]-->
Time 295: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 296: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 297: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 298: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 299: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 300: in function user_memcpy, expression <loc dest> = <ptr s2+6> + 1
--[red_binop]-->
Time 301: in function user_memcpy, expression <loc dest> = <ptr s2+7>
--[red_assign]-->
Time 302: in function user_memcpy, expression <ptr s2+7>
--[step_do_2]-->
Time 303: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 304: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 305: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 306: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 307: in function user_memcpy, expression <loc n> = 2U - 1
--[red_binop]-->
Time 308: in function user_memcpy, expression <loc n> = 1U
--[red_assign]-->
Time 309: in function user_memcpy, expression 1U
--[step_do_2]-->
Time 310: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 311: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 312: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 313: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 314: in function user_memcpy, expression 1U > 0
--[red_binop]-->
Time 315: in function user_memcpy, expression 1
--[step_while_true]-->
Time 316: in function user_memcpy, statement
*dest = *src; src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 317: in function user_memcpy, statement *dest = *src;
--[step_do_1]-->
Time 318: in function user_memcpy, expression *dest = *src
--[red_var_local]-->
Time 319: in function user_memcpy, expression *<loc dest> = *src
--[red_rvalof]-->
Time 320: in function user_memcpy, expression *<ptr s2+7> = *src
--[red_deref]-->
Time 321: in function user_memcpy, expression <loc s2+7> = *src
--[red_var_local]-->
Time 322: in function user_memcpy, expression <loc s2+7> = *<loc src>
--[red_rvalof]-->
Time 323: in function user_memcpy, expression <loc s2+7> = *<ptr s1+7>
--[red_deref]-->
Time 324: in function user_memcpy, expression <loc s2+7> = <loc s1+7>
--[red_rvalof]-->
Time 325: in function user_memcpy, expression <loc s2+7> = 63
--[red_assign]-->
Time 326: in function user_memcpy, expression 63
--[step_do_2]-->
Time 327: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 328: in function user_memcpy, statement src += 1; dest += 1; n -= 1;
--[step_seq]-->
Time 329: in function user_memcpy, statement src += 1;
--[step_do_1]-->
Time 330: in function user_memcpy, expression src += 1
--[red_var_local]-->
Time 331: in function user_memcpy, expression <loc src> += 1
--[red_assignop]-->
Time 332: in function user_memcpy, expression <loc src> = <ptr s1+7> + 1
--[red_binop]-->
Time 333: in function user_memcpy, expression <loc src> = <ptr s1+8>
--[red_assign]-->
Time 334: in function user_memcpy, expression <ptr s1+8>
--[step_do_2]-->
Time 335: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 336: in function user_memcpy, statement dest += 1; n -= 1;
--[step_seq]-->
Time 337: in function user_memcpy, statement dest += 1;
--[step_do_1]-->
Time 338: in function user_memcpy, expression dest += 1
--[red_var_local]-->
Time 339: in function user_memcpy, expression <loc dest> += 1
--[red_assignop]-->
Time 340: in function user_memcpy, expression <loc dest> = <ptr s2+7> + 1
--[red_binop]-->
Time 341: in function user_memcpy, expression <loc dest> = <ptr s2+8>
--[red_assign]-->
Time 342: in function user_memcpy, expression <ptr s2+8>
--[step_do_2]-->
Time 343: in function user_memcpy, statement /*skip*/;
--[step_skip_seq]-->
Time 344: in function user_memcpy, statement n -= 1;
--[step_do_1]-->
Time 345: in function user_memcpy, expression n -= 1
--[red_var_local]-->
Time 346: in function user_memcpy, expression <loc n> -= 1
--[red_assignop]-->
Time 347: in function user_memcpy, expression <loc n> = 1U - 1
--[red_binop]-->
Time 348: in function user_memcpy, expression <loc n> = 0U
--[red_assign]-->
Time 349: in function user_memcpy, expression 0U
--[step_do_2]-->
Time 350: in function user_memcpy, statement /*skip*/;
--[step_skip_or_continue_while]-->
Time 351: in function user_memcpy, statement
while (n > 0) {
*dest = *src;
src += 1;
dest += 1;
n -= 1;
}
--[step_while]-->
Time 352: in function user_memcpy, expression n > 0
--[red_var_local]-->
Time 353: in function user_memcpy, expression <loc n> > 0
--[red_rvalof]-->
Time 354: in function user_memcpy, expression 0U > 0
--[red_binop]-->
Time 355: in function user_memcpy, expression 0
--[step_while_false]-->
Time 356: in function user_memcpy, statement /*skip*/;
--[step_skip_call]-->
Time 357: returning <undef>
--[step_returnstate]-->
Time 358: in function main, expression <undef>
--[step_do_2]-->
Time 359: in function main, statement /*skip*/;
--[step_skip_seq]-->
Time 360: in function main, statement
printf(__stringlit_1, ((*.)).i, ((*.)).i);
--[step_do_1]-->
Time 361: in function main, expression
printf(__stringlit_1, ((*.)).i, ((*.)).i)
--[red_var_global]-->
Time 362: in function main, expression
printf(<loc __stringlit_1>, ((*.)).i, ((*.)).i)
--[red_rvalof]-->
Time 363: in function main, expression
printf(<ptr __stringlit_1>, ((*.)).i, ((*.)).i)
--[red_var_local]-->
Time 364: in function main, expression
printf(<ptr __stringlit_1>, ((*.)).i, ((*.)).i)
--[red_rvalof]-->
Time 365: in function main, expression
printf(<ptr __stringlit_1>, ((*.)).i, ((*.)).i)
--[red_deref]-->
Time 366: in function main, expression
printf(<ptr __stringlit_1>, <loc s1>.i, ((*.)).i)
--[red_rvalof]-->
Time 367: in function main, expression
printf(<ptr __stringlit_1>, <ptr s1>.i, ((*.)).i)
--[red_field_struct]-->
Time 368: in function main, expression
printf(<ptr __stringlit_1>, <loc s1>, ((*.)).i)
--[red_rvalof]-->
Time 369: in function main, expression
printf(<ptr __stringlit_1>, 1, ((*.)).i)
--[red_var_local]-->
Time 370: in function main, expression
printf(<ptr __stringlit_1>, 1, ((*.)).i)
--[red_rvalof]-->
Time 371: in function main, expression
printf(<ptr __stringlit_1>, 1, ((*.)).i)
--[red_deref]-->
Time 372: in function main, expression
printf(<ptr __stringlit_1>, 1, <loc s2>.i)
--[red_rvalof]-->
Time 373: in function main, expression
printf(<ptr __stringlit_1>, 1, <ptr s2>.i)
--[red_field_struct]-->
Time 374: in function main, expression
printf(<ptr __stringlit_1>, 1, <loc s2>)
--[red_rvalof]-->
Time 375: in function main, expression printf(<ptr __stringlit_1>, 1, 1)
p->i = 1 q->i = 1
Time 375: observable event:
extcall printf(& __stringlit_1, 1, 1) -> 19
--[red_builtin]-->
Time 376: in function main, expression 19
--[step_do_2]-->
Time 377: in function main, statement /*skip*/;
--[step_skip_seq]-->
Time 378: in function main, statement return 0;
--[step_return_1]-->
Time 379: in function main, expression 0
--[step_return_2]-->
Time 380: returning 0
Time 380: program terminated (exit code = 0)
In file included from pointer_copy_user_dataflow_direct_bytewise_struct.c:1:
In file included from /usr/include/stdio.h:64:
In file included from /usr/include/_stdio.h:68:
/usr/include/sys/cdefs.h:81:2: warning: "Unsupported compiler detected" [-W#warnings]
#warning "Unsupported compiler detected"
^
1 warning generated.