Messages in this thread | | | Date | Mon, 26 Nov 2012 11:07:25 +0800 | From | Qing Xu <> | Subject | Re: [PATCH] regulator: max8925: fix compiler warnings |
| |
On 11/25/2012 01:55 AM, Mark Brown wrote: > On Fri, Nov 23, 2012 at 10:27:12AM +0800, Qing Xu wrote: > >> But, in fact, it is not necessary to initialize regulator_idx. >> for (i = 0; i < ARRAY_SIZE(max8925_regulator_info); i++) { >> ri = &max8925_regulator_info[i]; >> if (ri->vol_reg == res->start) { >> ****** if regulator_idx can not get a match "i" here, it will return >> -EINVAL in below code >> regulator_idx = i; >> break; >> } >> } >> if (i == ARRAY_SIZE(max8925_regulator_info)) { >> dev_err(&pdev->dev, "Failed to find regulator %llu\n", >> (unsigned long long)res->start); >> return -EINVAL; >> } >> How to solve such compiler warning? > Typically by reporting a compiler bug, though sometimes in the process > of doing that one finds out that there's some non-obvious way in which > the code can break.
It seems not like a compiler bug, its logic is:
for(...; i<xxx; ...) { if (...) { regulator_idx = i break; } }
if (i == xxx) return ERROR;
If regulator_idx can not get a matched "i" value, code will return ERROR. But it seems that compiler can not do so complex judge. And, I think the code is safe even if regulator_idx is not initialized, also because of the "return ERROR" judge.
| |