xref: /aosp_15_r20/external/clang/test/Analysis/engine/replay-without-inlining.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -verify %s
2*67e74705SXin Li // expected-no-diagnostics
3*67e74705SXin Li 
4*67e74705SXin Li typedef struct {
5*67e74705SXin Li     char I[4];
6*67e74705SXin Li     int S;
7*67e74705SXin Li } Hdr;
8*67e74705SXin Li typedef struct {
9*67e74705SXin Li     short w;
10*67e74705SXin Li } Hdr2;
11*67e74705SXin Li typedef struct {
12*67e74705SXin Li     Hdr2 usedtobeundef;
13*67e74705SXin Li } Info;
14*67e74705SXin Li typedef struct {
15*67e74705SXin Li     const unsigned char *ib;
16*67e74705SXin Li     int cur;
17*67e74705SXin Li     int end;
18*67e74705SXin Li } IB;
19*67e74705SXin Li unsigned long gl(IB *input);
20*67e74705SXin Li inline void gbs(IB *input, unsigned char *buf, int count);
21*67e74705SXin Li void getB(IB *st, Hdr2 *usedtobeundef);
gb(IB * input)22*67e74705SXin Li inline unsigned char gb(IB *input) {
23*67e74705SXin Li     if (input->cur + 1 > input->end)
24*67e74705SXin Li       ;
25*67e74705SXin Li     return input->ib[(input->cur)++];
26*67e74705SXin Li }
getID(IB * st,char str[4])27*67e74705SXin Li static void getID(IB *st, char str[4]) {
28*67e74705SXin Li     str[0] = gb(st);
29*67e74705SXin Li     str[1] = gb(st);
30*67e74705SXin Li     str[2] = gb(st);
31*67e74705SXin Li     str[3] = gb(st);
32*67e74705SXin Li }
getH(IB * st,Hdr * header)33*67e74705SXin Li static void getH(IB *st, Hdr *header) {
34*67e74705SXin Li     getID (st, header->I);
35*67e74705SXin Li     header->S = gl(st);
36*67e74705SXin Li }
readILBM(IB * st,Info * pic)37*67e74705SXin Li static void readILBM(IB *st, Info *pic) {
38*67e74705SXin Li     // Initialize field;
39*67e74705SXin Li     pic->usedtobeundef.w = 5;
40*67e74705SXin Li 
41*67e74705SXin Li     // Time out in the function so that we will be forced to retry with no inlining.
42*67e74705SXin Li     Hdr header;
43*67e74705SXin Li     getH (st, &header);
44*67e74705SXin Li     getID(st, header.I);
45*67e74705SXin Li     int i = 0;
46*67e74705SXin Li     while (st->cur < st->end && i < 4) {
47*67e74705SXin Li       i++;
48*67e74705SXin Li       getH (st, &header);
49*67e74705SXin Li     }
50*67e74705SXin Li }
bitmapImageRepFromIFF(IB st,const unsigned char * ib,int il)51*67e74705SXin Li int bitmapImageRepFromIFF(IB st, const unsigned char *ib, int il) {
52*67e74705SXin Li     Info pic;
53*67e74705SXin Li     st.ib = ib;
54*67e74705SXin Li     st.cur = 0;
55*67e74705SXin Li     st.end = il;
56*67e74705SXin Li     readILBM(&st,&pic);
57*67e74705SXin Li     return pic.usedtobeundef.w; // No undefined value warning here.
58*67e74705SXin Li }
59