
Dear Heiko,
In message 545B81D9.6070602@denx.de you wrote:
[drivers/mtd/ubi/eba.c:1275]: (error) Uninitialized variable: aeb
can you please have a look? Thanks!
I see in drivers/mtd/ubi/eba.c:
1267: ubi_rb_for_each_entry(rb, aeb, &av->root, u.rb) 1268: scan_eba[i][aeb->lnum] = aeb->pnum; 1269: 1270: av = ubi_find_av(ai_fastmap, idx2vol_id(ubi, i)); 1271: if (!av) 1272: continue; 1273: 1274: ubi_rb_for_each_entry(rb, aeb, &av->root, u.rb) 1275: fm_eba[i][aeb->lnum] = aeb->pnum;
Why does cppcheck only report line 1275 not also line 1268 and also 1351? I could not currently see, why this pops up for line 1274 ...
we should also look at the ubi_rb_for_each_entry() macro:
912 #define ubi_rb_for_each_entry(rb, pos, root, member) \ 913 for (rb = rb_first(root), \ 914 pos = (rb ? container_of(rb, typeof(*pos), member) : NULL); \ 915 rb; \ 916 rb = rb_next(rb), \ 917 pos = (rb ? container_of(rb, typeof(*pos), member) : NULL))
We can see there, that this will always set "pos", i. e. the 2nd argument, to a well-defined value.
Looks like a false positive to me, then.
Best regards,
Wolfgang Denk