编译器错误,3.0.101 内核使用 gcc 4.9
Compiler error, with 3.0.101 kernel using gcc 4.9
这里是错误
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);
}
(*德)++;是问题
我不明白,3.4 具有相同的编码编译就好了。如有任何帮助,我们将不胜感激。
更新:
看完后,http://lwn.net/Articles/529954/
我是运行-O3优化,影响-Wmaybe-uninitialized
更新 2:
vfat 构建为一个模块,没问题。只有内置问题。我想知道为什么会这样?
Code Aurora 论坛的补丁解决了这个问题。
发件人:大卫·布朗
日期:2010 年 10 月 10 日,星期日 23:34:20 -0700
主题:[PATCH] FAT:修复警告
fs/fat/dir.c:43:警告:'de' 可能未初始化地用于此函数
代码流的复杂性使这看起来成为可能。初始化
将该值设置为 NULL 以消除编译器警告。这个只有口罩
警告,因为如果该值未被使用,仍然会有一个
空指针。
Change-Id: I9fc36abace09409853b63e0997328b75ce703769
Signed-off-by: David Brown <davidb@codeaurora.org>
---
fs/fat/dir.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/fat/dir.c b/fs/fat/dir.c
index 65e174b..409b3ce 100644
--- a/fs/fat/dir.c
+++ b/fs/fat/dir.c
@@ -343,7 +343,7 @@ int fat_search_long(struct inode *inode, const unsigned char *name,
struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh = NULL;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
struct nls_table *nls_disk = sbi->nls_disk;
unsigned char nr_slots;
wchar_t bufuname[14];
@@ -468,7 +468,7 @@ static int __fat_readdir(struct inode *inode, struct file *filp, void *dirent,
struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
struct nls_table *nls_disk = sbi->nls_disk;
unsigned char nr_slots;
wchar_t bufuname[14];
@@ -887,7 +887,7 @@ EXPORT_SYMBOL_GPL(fat_get_dotdot_entry);
int fat_dir_empty(struct inode *dir)
{
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
loff_t cpos;
int result = 0;
@@ -913,7 +913,7 @@ EXPORT_SYMBOL_GPL(fat_dir_empty);
int fat_subdirs(struct inode *dir)
{
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
loff_t cpos;
int count = 0;
@@ -1240,7 +1240,7 @@ int fat_add_entries(struct inode *dir, void *slots, int nr_slots,
struct super_block *sb = dir->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh, *prev, *bhs[3]; /* 32*slots (672bytes) */
- struct msdos_dir_entry *uninitialized_var(de);
+ struct msdos_dir_entry *de = NULL;
int err, free_slots, i, nr_bhs;
loff_t pos, i_pos;
--
2.5.0
这里是错误
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);
}
(*德)++;是问题
我不明白,3.4 具有相同的编码编译就好了。如有任何帮助,我们将不胜感激。
更新: 看完后,http://lwn.net/Articles/529954/ 我是运行-O3优化,影响-Wmaybe-uninitialized
更新 2: vfat 构建为一个模块,没问题。只有内置问题。我想知道为什么会这样?
Code Aurora 论坛的补丁解决了这个问题。
发件人:大卫·布朗 日期:2010 年 10 月 10 日,星期日 23:34:20 -0700 主题:[PATCH] FAT:修复警告
fs/fat/dir.c:43:警告:'de' 可能未初始化地用于此函数
代码流的复杂性使这看起来成为可能。初始化 将该值设置为 NULL 以消除编译器警告。这个只有口罩 警告,因为如果该值未被使用,仍然会有一个 空指针。
Change-Id: I9fc36abace09409853b63e0997328b75ce703769
Signed-off-by: David Brown <davidb@codeaurora.org>
---
fs/fat/dir.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/fat/dir.c b/fs/fat/dir.c
index 65e174b..409b3ce 100644
--- a/fs/fat/dir.c
+++ b/fs/fat/dir.c
@@ -343,7 +343,7 @@ int fat_search_long(struct inode *inode, const unsigned char *name,
struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh = NULL;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
struct nls_table *nls_disk = sbi->nls_disk;
unsigned char nr_slots;
wchar_t bufuname[14];
@@ -468,7 +468,7 @@ static int __fat_readdir(struct inode *inode, struct file *filp, void *dirent,
struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
struct nls_table *nls_disk = sbi->nls_disk;
unsigned char nr_slots;
wchar_t bufuname[14];
@@ -887,7 +887,7 @@ EXPORT_SYMBOL_GPL(fat_get_dotdot_entry);
int fat_dir_empty(struct inode *dir)
{
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
loff_t cpos;
int result = 0;
@@ -913,7 +913,7 @@ EXPORT_SYMBOL_GPL(fat_dir_empty);
int fat_subdirs(struct inode *dir)
{
struct buffer_head *bh;
- struct msdos_dir_entry *de;
+ struct msdos_dir_entry *de = NULL;
loff_t cpos;
int count = 0;
@@ -1240,7 +1240,7 @@ int fat_add_entries(struct inode *dir, void *slots, int nr_slots,
struct super_block *sb = dir->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct buffer_head *bh, *prev, *bhs[3]; /* 32*slots (672bytes) */
- struct msdos_dir_entry *uninitialized_var(de);
+ struct msdos_dir_entry *de = NULL;
int err, free_slots, i, nr_bhs;
loff_t pos, i_pos;
--
2.5.0