Viewing file: compound-assignment-5.c (3.68 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#include "analyzer-decls.h"
struct coord { int x; int y; };
/* Copying from one on-stack array to another. */
void test_1 (void) { struct coord arr_a[16]; struct coord arr_b[16]; arr_a[3].x = 5; arr_a[3].y = 6;
arr_b[7] = arr_a[3];
__analyzer_eval (arr_b[7].x == 5); /* { dg-warning "TRUE" } */ __analyzer_eval (arr_b[7].y == 6); /* { dg-warning "TRUE" } */ }
/* Copying from an on-stack array to a global array. */
struct coord glob_arr[16];
void test_2 (void) { struct coord arr[16]; arr[3].x = 5; arr[3].y = 6;
glob_arr[7] = arr[3];
__analyzer_eval (glob_arr[7].x == 5); /* { dg-warning "TRUE" } */ __analyzer_eval (glob_arr[7].y == 6); /* { dg-warning "TRUE" } */ }
/* Copying from a partially initialized on-stack array to a global array. */
struct coord glob_arr[16];
void test_3 (void) { struct coord arr[16]; arr[3].y = 6;
glob_arr[7] = arr[3]; // or should the uninit warning be here?
__analyzer_eval (glob_arr[7].x); /* { dg-warning "uninitialized" "uninit" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */ __analyzer_eval (glob_arr[7].y == 6); /* { dg-warning "TRUE" } */ }
/* Symbolic bindings: copying from one array to another. */
struct coord glob_arr[16];
void test_4 (int i) { struct coord arr_a[16]; struct coord arr_b[16]; arr_a[i].x = 5; arr_a[i].y = 6; __analyzer_eval (arr_a[i].x == 5); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ __analyzer_eval (arr_a[i].y == 6); /* { dg-warning "TRUE" } */
arr_b[i] = arr_a[i];
__analyzer_eval (arr_b[i].x == 5); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ __analyzer_eval (arr_b[i].y == 6); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ }
/* Symbolic bindings: copying within an array: symbolic src and dest */
struct coord glob_arr[16];
void test_5a (int i, int j) { struct coord arr[16]; arr[i].x = 5; arr[i].y = 6;
arr[j] = arr[i];
__analyzer_eval (arr[j].x == 5); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ __analyzer_eval (arr[j].y == 6); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ }
/* Symbolic bindings: copying within an array: symbolic src, concrete dest. */
struct coord glob_arr[16];
void test_5b (int i) { struct coord arr[16]; arr[i].x = 5; arr[i].y = 6;
arr[3] = arr[i];
__analyzer_eval (arr[3].x == 5); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ __analyzer_eval (arr[3].y == 6); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ }
/* Symbolic bindings: copying within an array: concrete src, symbolic dest. */
struct coord glob_arr[16];
void test_5c (int i) { struct coord arr[16]; arr[3].x = 5; arr[3].y = 6;
arr[i] = arr[3];
__analyzer_eval (arr[i].x == 5); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ __analyzer_eval (arr[i].y == 6); /* { dg-warning "TRUE" "TRUE" { xfail *-*-* } } */ /* { dg-bogus "UNKNOWN" "UNKNOWN" { xfail *-*-* } .-1 } */ }
/* No info on the subregion being copied, and hence binding_cluster2::maybe_get_compound_binding should return NULL. */
void test_6 (void) { struct coord arr[16]; arr[7] = glob_arr[3];
__analyzer_eval (arr[7].x == 5); /* { dg-warning "UNKNOWN" } */ __analyzer_eval (arr[7].y == 6); /* { dg-warning "UNKNOWN" } */ }
|