【发布时间】:2015-01-22 23:54:08
【问题描述】:
这是错误
fs/fat/dir.c:在函数“fat_dir_empty”中: fs/fat/dir.c:124:8:警告:“de”可能在此函数中未初始化使用 [-Wmaybe-uninitialized] 错误,禁止警告:dir.c:124
static inline int fat_get_entry(struct inode *dir, loff_t *pos,
struct buffer_head **bh,
struct msdos_dir_entry **de)
{
/* Fast stuff first */
if (*bh && *de &&
(*de - (struct msdos_dir_entry *)(*bh)->b_data) <
MSDOS_SB(dir->i_sb)->dir_per_block - 1) {
*pos += sizeof(struct msdos_dir_entry);
(*de)++;
return 0;
}
return fat__get_entry(dir, pos, bh, de);
}
(*de)++;是问题
我不明白,具有相同编码的 3.4 编译就好了。对此的任何帮助将不胜感激。
更新: 看完后http://lwn.net/Articles/529954/ 我正在运行 -O3 优化,这会影响 -Wmaybe-uninitialized
更新 2: vfat 作为模块构建,没问题。只有作为内置的问题。我想知道为什么会这样?
【问题讨论】:
-
您发布了我所看到的不在 3.0.101 中的代码的摘录。修改它的补丁是 f08b4988f229f(fs/fat:修复 dir.c 中的所有其他检查补丁问题)。此外,问题不在你提到的那一行。仔细阅读编译器告诉你的内容。
-
是的,已编辑以尝试修复。 (*de) ++;是第 124 行,这就是错误消息指向的位置?还是我错了,这一切都是新手。
-
Applied commit fat:修复构建警告,github.com/torvalds/linux/commit/… 还有 fs/fat:修复 dir.c 中的所有其他检查补丁问题,github.com/torvalds/linux/commit/…
-
很好的补充主题lwn.net/Articles/529954
-
有趣的是,在当前内核树中。 fs/fat/dir.c 的第 1279 行是 struct msdos_dir_entry *uninitialized_var(de);这不是 Linus 补丁,而是由 OGAWA 更改的。 lkml.org/lkml/2011/5/19/622
标签: linux-kernel gcc-warning gcc4.9