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