[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