On Wed, Dec 05, 2018 at 02:40:12PM +0800, Qu Wenruo wrote: > GCC 8.2.1 will report the following warning with "make W=1": > > ctree.c: In function 'btrfs_next_sibling_tree_block': > ctree.c:2990:21: warning: 'slot' may be used uninitialized in this function > [-Wmaybe-uninitialized] > path->slots[level] = slot; > ~~~~~~~~~~~~~~~~~~~^~~~~~ > > The culprit is the following code: > > int slot; << Not initialized > int level = path->lowest_level + 1; > BUG_ON(path->lowest_level + 1 >= BTRFS_MAX_LEVEL); > while(level < BTRFS_MAX_LEVEL) { > slot = path->slots[level] + 1; > ^^^^^^ but we initialize @slot here. > ... > } > path->slots[level] = slot; > > It's possible that compiler doesn't get enough hint for BUG_ON() on > lowest_level + 1 >= BTRFS_MAX_LEVEL case. > > Fix it by using a do {} while() loop other than while() {} loop, to > ensure we will run the loop for at least once.
I was hoping that we can actually add the hint to BUG_ON so the code does not continue if the condition is true.