1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,alpha.unix,alpha.security.ArrayBound -analyzer-store=region -verify %s 2 // expected-no-diagnostics 3 4 //===----------------------------------------------------------------------===// 5 // This file tests cases where we should not flag out-of-bounds warnings. 6 //===----------------------------------------------------------------------===// 7 8 void f() { 9 long x = 0; 10 char *y = (char*) &x; 11 char c = y[0] + y[1] + y[2]; // no-warning 12 short *z = (short*) &x; 13 short s = z[0] + z[1]; // no-warning 14 } 15 16 void g() { 17 int a[2]; 18 char *b = (char*)a; 19 b[3] = 'c'; // no-warning 20 } 21 22 typedef typeof(sizeof(int)) size_t; 23 void *malloc(size_t); 24 void free(void *); 25 26 void field() { 27 struct vec { size_t len; int data[0]; }; 28 struct vec *a = malloc(sizeof(struct vec) + 10*sizeof(int)); 29 a->len = 10; 30 a->data[1] = 5; // no-warning 31 free(a); 32 } 33