2015-01-22 4 views
0

Здесь ошибкаКомпилятор ошибок, с 3.0.101 ядра с помощью GCC 4.9

фс/жир/dir.c: В функции 'fat_dir_empty': фс/жир/dir.c: 124: 8: предупреждение : 'де' может быть использована неинициализированными в этой функции [-Wmaybe-неинициализированный] ошибки, запретное предупреждение: 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 с тем же кодированием компилируется просто отлично. Любая помощь с этим будет оценена по достоинству.

UPDATE: После прочтения http://lwn.net/Articles/529954/ я бегу с -O3 оптимизации, какие эффекты -Wmaybe-UNINITIALIZED

UPDATE 2: VFAT строит как модуль, без проблем. Только проблема как встроенная. Интересно, почему это было бы?

+0

Вы отправили выдержку из кода, которого нет в 3.0.101, как я вижу. Патч, который его модифицирует, это ** f08b4988f229f ** (fs/fat: исправить все другие проблемы с checkpatch в dir.c). Более того, проблема не в том, что вы упомянули. Прочитайте внимательно, что компилятор вам сообщает. – 0andriy

+0

Да, отредактировано в попытке исправить. (* de) ++; строка 124, на что указывает сообщение об ошибке? Или я ошибаюсь, новичок во всем этом. – Jcfunk

+0

Прикладная фиксация жира: исправление ошибки сборки, https://github.com/torvalds/linux/commit/8c320c079cde0286d71368961231e426539868b4 также fs/fat: исправить все другие проблемы с checkpatch в dir.c, https://github.com/torvalds/linux/commit/f08b4988f229fb41a4995829dc0db34c5e35dfbb – Jcfunk

ответ

0

Патч от Code Aurora Forum исправляет это.

От: David Brown Дата: Вс, 10 октября 2010 23:34:20 -0700 Тема: [PATCH] FAT: Фикс предупреждение

фс/жир/dir.c: 43: предупреждение: ' de 'может использоваться неинициализированным в этой функции

Сложность потока кода делает это возможным. Инициализируйте значение NULL, чтобы исключить предупреждение компилятора. Это только маскирует предупреждение, поскольку, если значение не было использовано, все равно будет указатель NULL .

Change-Id: I9fc36abace09409853b63e0997328b75ce703769 
Signed-off-by: David Brown <[email protected]> 
--- 
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