| // RUN: %clang_analyze_cc1 -analyzer-checker=core %s -verify  | 
 | // expected-no-diagnostics | 
 |  | 
 | #define SIZE 2 | 
 |  | 
 | typedef struct { | 
 |   int noOfSymbols; | 
 | } Params; | 
 |  | 
 | static void create(const Params * const params, int fooList[]) { | 
 |   int tmpList[SIZE] = {0}; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     fooList[i] = tmpList[i]; | 
 | } | 
 |  | 
 | int work(Params * const params) { | 
 |   int fooList[SIZE]; | 
 |   create(params, fooList); | 
 |   int sum = 0; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     sum += fooList[i]; // no-warning | 
 |   return sum; | 
 | } | 
 |  | 
 | static void create2(const Params * const * pparams, int fooList[]) { | 
 |   const Params * params = *pparams; | 
 |   int tmpList[SIZE] = {0}; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     fooList[i] = tmpList[i]; | 
 | } | 
 |  | 
 | int work2(const Params * const params) { | 
 |   int fooList[SIZE]; | 
 |   create2(¶ms, fooList); | 
 |   int sum = 0; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     sum += fooList[i]; // no-warning | 
 |   return sum; | 
 | } | 
 |  | 
 | static void create3(Params * const * pparams, int fooList[]) { | 
 |   const Params * params = *pparams; | 
 |   int tmpList[SIZE] = {0}; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     fooList[i] = tmpList[i]; | 
 | } | 
 |  | 
 | int work3(const Params * const params) { | 
 |   int fooList[SIZE]; | 
 |   Params *const *ptr = (Params *const*)¶ms; | 
 |   create3(ptr, fooList); | 
 |   int sum = 0; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     sum += fooList[i]; // no-warning | 
 |   return sum; | 
 | } | 
 |  | 
 | typedef Params ParamsTypedef; | 
 | typedef const ParamsTypedef *ConstParamsTypedef; | 
 |  | 
 | static void create4(ConstParamsTypedef const params, int fooList[]) { | 
 |   int tmpList[SIZE] = {0}; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     fooList[i] = tmpList[i]; | 
 | } | 
 |  | 
 | int work4(Params * const params) { | 
 |   int fooList[SIZE]; | 
 |   create4(params, fooList); | 
 |   int sum = 0; | 
 |   for (int i = 0; i < params->noOfSymbols; i++) | 
 |     sum += fooList[i]; // no-warning | 
 |   return sum; | 
 | } |