1183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks 4183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zakstypedef struct { 5183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks char I[4]; 6183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks int S; 7183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} Hdr; 8183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zakstypedef struct { 9183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks short w; 10183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} Hdr2; 11183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zakstypedef struct { 12183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks Hdr2 usedtobeundef; 13183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} Info; 14183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zakstypedef struct { 15183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks const unsigned char *ib; 16183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks int cur; 17183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks int end; 18183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} IB; 19cd0655b17249c4c4908ca91462657f62285017e6Nick Lewyckyunsigned long gl(IB *input); 20183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksinline void gbs(IB *input, unsigned char *buf, int count); 21183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksvoid getB(IB *st, Hdr2 *usedtobeundef); 22183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksinline unsigned char gb(IB *input) { 23183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks if (input->cur + 1 > input->end) 24183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks ; 25183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks return input->ib[(input->cur)++]; 26183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} 27183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksstatic void getID(IB *st, char str[4]) { 28183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks str[0] = gb(st); 29183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks str[1] = gb(st); 30183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks str[2] = gb(st); 31183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks str[3] = gb(st); 32183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} 33183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksstatic void getH(IB *st, Hdr *header) { 34183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks getID (st, header->I); 35183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks header->S = gl(st); 36183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} 37183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksstatic void readILBM(IB *st, Info *pic) { 38183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks // Initialize field; 39183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks pic->usedtobeundef.w = 5; 40183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks 41183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks // Time out in the function so that we will be forced to retry with no inlining. 42183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks Hdr header; 43183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks getH (st, &header); 44183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks getID(st, header.I); 45183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks int i = 0; 46183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks while (st->cur < st->end && i < 4) { 47183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks i++; 48183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks getH (st, &header); 49183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks } 50183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} 51183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaksint bitmapImageRepFromIFF(IB st, const unsigned char *ib, int il) { 52183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks Info pic; 53183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks st.ib = ib; 54183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks st.cur = 0; 55183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks st.end = il; 56183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks readILBM(&st,&pic); 57183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks return pic.usedtobeundef.w; // No undefined value warning here. 58183ff2aaacbc1995ed64d5e2ffea4456fd871633Anna Zaks} 59