[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:27501] Re: gcc warning



From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 Jan 2001 21:35:02 +0900
> 以下のようなソースを準備して、
> 
>     #include <string.h>
>     int main( void ){ return 0; }
> 
> 以下のように最適化オプションを指定してコンパイルすると、
> 
>     gcc -Wall -Wconversion -O -o sample sample.c
> 
> warning が大量に発生します。
> 
>     In file included from /usr/include/string.h:361,
>                      from sample.c:1:
>     /usr/include/bits/string2.h: In function `__strsep_g':
>     /usr/include/bits/string2.h:1172: warning: passing arg 2 of
>     `__strpbrk_c2' with different width due to prototype
>     [後略]
> 
> しかし、最適化オプションを指定しなければ、まったく warning は発生しま
> せん。
> 
>     gcc -Wall -Wconversion -o sample sample.c
> 
> これを避けるためには、どうすれば良いでしょうか。

glibc のバグです。
随分前に glibc 2.2 では修正を施しましたので、sid/woody では
この問題は既に解決済です。
しかし、glibc 2.1 では修正パッチが入ってないので、問題が発生します。

以下のパッチを当れば、warning はなくなるはずです (動作未確認)。
ちなみに、critical な支障はないので、potato の libc6 package
には BTS していません。

--
後藤 正徳


--- /usr/include/bits/string2.h Tue Jan 16 05:03:36 2001
+++ /usr/include/bits/string2.h.new   Sat Mar 17 02:37:46 2001
@@ -980,10 +980,10 @@
                  : strpbrk (s, accept)))))                                   \
       : strpbrk (s, accept)); })
 
-__STRING_INLINE char *__strpbrk_c2 (__const char *__s, char __accept1,
-                                    char __accept2);
+__STRING_INLINE char *__strpbrk_c2 (__const char *__s, int __accept1,
+                                    int __accept2);
 __STRING_INLINE char *
-__strpbrk_c2 (__const char *__s, char __accept1, char __accept2)
+__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
 {
   /* Please note that __accept1 and __accept2 never can be '\0'.  */
   while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
@@ -991,11 +991,11 @@
   return *__s == '\0' ? NULL : (char *) (size_t) __s;
 }
 
-__STRING_INLINE char *__strpbrk_c3 (__const char *__s, char __accept1,
-                                    char __accept2, char __accept3);
+__STRING_INLINE char *__strpbrk_c3 (__const char *__s, int __accept1,
+                                    int __accept2, int __accept3);
 __STRING_INLINE char *
-__strpbrk_c3 (__const char *__s, char __accept1, char __accept2,
-             char __accept3)
+__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
+             int __accept3)
 {
   /* Please note that __accept1 to __accept3 never can be '\0'.  */
   while (*__s != '\0' && *__s != __accept1 && *__s != __accept2