kmarshall added a comment.

That makes sense. In the cases that I'm finding, the original call site is in 
application source code, but the warning is generated from inside a system 
header. So, I suppose the suppressions are working as intended, and we just 
need to add one-off suppressions for the known noisy sources? Where is the 
suppression database located? FWIW, there aren't many unique error sources - I 
only counted 9 after running the warnings through "uniq | sort".

Re: specifics, here the most common one that I'm seeing. It seems like a bogus 
buffer overrun warning?

  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1258:9:
 note: Assigned value is garbage or undefined
          *__s++ = *__first++;
                 ^ ~~~~~~~~~~

The error is generated from this trivial logging line 
<https://cs.chromium.org/chromium/src/dbus/message.cc?rcl=255d25e6d389106b75c90110b4e00b022e472cc5&l=233>:

  LOG(FATAL) << "Unknown type: " << type;  // |type| is an enum

The offending C++ library code snippet is here (note the line w/comment 
"GENERATES WARNING")

  template<typename _CharT>
    _CharT*
    __add_grouping(_CharT* __s, _CharT __sep,
                   const char* __gbeg, size_t __gsize,
                   const _CharT* __first, const _CharT* __last)
    {
      size_t __idx = 0;
      size_t __ctr = 0;
  
      while (__last - __first > __gbeg[__idx]
             && static_cast<signed char>(__gbeg[__idx]) > 0
             && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
        {
          __last -= __gbeg[__idx];
          __idx < __gsize - 1 ? ++__idx : ++__ctr;
        }
  
      while (__first != __last)
        *__s++ = *__first++;  // <------ GENERATES WARNING
  
      while (__ctr--)
        {
          *__s++ = __sep;         
          for (char __i = __gbeg[__idx]; __i > 0; --__i)
            *__s++ = *__first++;
        }
  
      while (__idx--)
        {
          *__s++ = __sep;         
          for (char __i = __gbeg[__idx]; __i > 0; --__i)
            *__s++ = *__first++;
        }
  
      return __s;
    }

Here's a full snippet of the analysis trace:

  ../../dbus/message.cc:233:9: note: Calling 'basic_ostream::operator<<'
          LOG(FATAL) << "Unknown type: " << type;
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ../../base/logging.h:414:23: note: expanded from macro 'LOG'
  #define LOG(severity) LAZY_STREAM(LOG_STREAM(severity), LOG_IS_ON(severity))
                        ^
  ../../base/logging.h:402:62: note: expanded from macro 'LAZY_STREAM'
    !(condition) ? (void) 0 : ::logging::LogMessageVoidify() & (stream)
                                                               ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:113:11:
 note: Assuming '__fmt' is not equal to 'oct'
        if (__fmt == ios_base::oct || __fmt == ios_base::hex)
            ^~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:113:11:
 note: Left side of '||' is false
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:113:37:
 note: Assuming '__fmt' is not equal to 'hex'
        if (__fmt == ios_base::oct || __fmt == ios_base::hex)
                                      ^~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:113:7:
 note: Taking false branch
        if (__fmt == ios_base::oct || __fmt == ios_base::hex)
        ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:116:9:
 note: Calling 'basic_ostream::_M_insert'
          return _M_insert(static_cast<long>(__n));
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:69:2:
 note: Taking true branch
          if (__cerb)
          ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/ostream.tcc:75:7:
 note: Calling 'num_put::put'
                  if (__np.put(*this, *this, this->fill(), __v).failed())
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.h:2336:16:
 note: Calling 'num_put::do_put'
        { return this->do_put(__s, __f, __fill, __v); }
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.h:2475:16:
 note: Calling 'num_put::_M_insert_int'
        { return _M_insert_int(__s, __io, __fill, __v); } 
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:868:22:
 note: Assuming '__basefield' is equal to 'oct'
          const bool __dec = (__basefield != ios_base::oct
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:869:8:
 note: Left side of '&&' is false
                              && __basefield != ios_base::hex);
                              ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:870:32:
 note: Assuming '__v' is <= 0
          const __unsigned_type __u = ((__v > 0 || !__dec)
                                        ^~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:870:32:
 note: Left side of '||' is false
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:870:31:
 note: '?' condition is true
          const __unsigned_type __u = ((__v > 0 || !__dec)
                                       ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:877:6:
 note: Assuming the condition is true
          if (__lc->_M_use_grouping)
              ^~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:877:2:
 note: Taking true branch
          if (__lc->_M_use_grouping)
          ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:884:6:
 note: Calling 'num_put::_M_group_int'
              _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:839:21:
 note: Calling '__add_grouping'
        _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1249:14:
 note: Assuming the condition is true
        while (__last - __first > __gbeg[__idx]
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1249:14:
 note: Left side of '&&' is true
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1250:10:
 note: Assuming the condition is true
               && static_cast<signed char>(__gbeg[__idx]) > 0
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1249:14:
 note: Left side of '&&' is true
        while (__last - __first > __gbeg[__idx]
               ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1249:7:
 note: Loop condition is true.  Entering loop body
        while (__last - __first > __gbeg[__idx]
        ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1254:4:
 note: Assuming the condition is false
            __idx < __gsize - 1 ? ++__idx : ++__ctr;
            ^~~~~~~~~~~~~~~~~~~
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1254:4:
 note: '?' condition is false
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1250:7:
 note: Left side of '&&' is false
               && static_cast<signed char>(__gbeg[__idx]) > 0
               ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1257:7:
 note: Loop condition is true.  Entering loop body
        while (__first != __last)
        ^
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1257:7:
 note: Loop condition is true.  Entering loop body
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1257:7:
 note: Loop condition is true.  Entering loop body
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1257:7:
 note: Loop condition is true.  Entering loop body
  
../../build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../include/c++/4.6/bits/locale_facets.tcc:1258:9:
 note: Assigned value is garbage or undefined
          *__s++ = *__first++;
                 ^ ~~~~~~~~~~


Repository:
  rL LLVM

https://reviews.llvm.org/D30593



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to