This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

STL alloc warning bug


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) {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]