This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
STL alloc warning bug
- To: gcc-bugs at gcc dot gnu dot org
- Subject: STL alloc warning bug
- From: Koen Deforche <koen at easics dot be>
- Date: Mon, 13 Mar 2000 19:00:15 +0100
- Organization: Easics nv, Leuven, Belgium, http://www.easics.com
Hi,
included is a patch that supresses a warning with gcc 2.95 and
gcc.2.95.2, triggered when compiling some code (i have not figured
out what is exactly the offending combination) which includes
this:
#include <string>
template <class Tl, class Tr>
inline bool operator<=(const Tl& x, const Tr& y) {
return !(y < x);
}
You get this kind of warning (with -Wall):
foo.h: In function `bool operator <=<size_t,
__default_alloc_template<true,0>::{anonymous enum}>(const size_t &,
const __default_alloc_template<true,0>::{anonymous enum} &)':
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/stl_alloc.h:498:
instantiated from
`__default_alloc_template<true,0>::_S_chunk_alloc(unsigned int, int &)'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/stl_alloc.h:531:
instantiated from `__default_alloc_template<true,0>::_S_refill(unsigned
int)'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/stl_alloc.h:419:
instantiated from `__default_alloc_template<true,0>::allocate(unsigned
int)'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/std/bastring.cc:33:
instantiated from
`basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>::Rep::operator new(unsigned int, unsigned int)'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/std/bastring.cc:60:
instantiated from
`basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>::Rep::create(unsigned int)'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/std/bastring.cc:71:
instantiated from
`basic_string<char,string_char_traits<char>,__default_alloc_template<true,0>
>::Rep::clone()'
/home/cad_vodka/gnu/tmp/gcc-2.95.2-solaris2.6/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/include/g++/std/bastring.h:75:
instantiated from here
foo.h:35: warning: comparison between signed and unsigned
Anyway, it seems that just a cast to (size_t) was missing, but I fail
to understand why else there is no warning.
koen.
--- /tmp/t Mon Mar 13 15:11:34 2000
+++ stl_alloc.h Mon Mar 13 14:57:36 2000
@@ -495,7 +495,7 @@
// Try to make do with what we have. That can't
// hurt. We do not try smaller requests, since that tends
// to result in disaster on multi-process machines.
- for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) {
+ for (__i = __size; __i <= (size_t) _MAX_BYTES; __i += _ALIGN) {
__my_free_list = _S_free_list + _S_freelist_index(__i);
__p = *__my_free_list;
if (0 != __p) {