| // 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; |
| } |