Fix GDB build with G++ 4.8
authorPedro Alves <palves@redhat.com>
Mon, 2 Oct 2017 09:18:30 +0000 (10:18 +0100)
committerPedro Alves <palves@redhat.com>
Mon, 2 Oct 2017 09:18:30 +0000 (10:18 +0100)
G++ 4.8 trips on:

  In file included from /opt/gcc-4.8/include/c++/4.8.5/algorithm:62:0,
   from ../../src/gdb/ada-lang.c:65:
  /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h: In instantiation of ‘_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >; _Tp = ada_exc_info]’:
  /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2283:70:   required from ‘_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >]’
  /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2315:54:   required from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >; _Size = long int]’
  /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:5461:36:   required from ‘void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >]’
  ../../src/gdb/ada-lang.c:13153:61:   required from here
  /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2245:19: error: passing ‘const ada_exc_info’ as ‘this’ argument of ‘bool ada_exc_info::operator<(const ada_exc_info&)’ discards qualifiers [-fpermissive]
      while (__pivot < *__last)
     ^

Seems to be a libstdc++ bug meanwhile fixed by:
  https://gcc.gnu.org/ml/libstdc++/2012-04/msg00074.

In any case, there's no reason these methods can't be const.

gdb/ChangeLog:
2017-10-02  Tom Tromey  <tom@tromey.com>
    Pedro Alves  <palves@redhat.com>

* ada-lang.h (ada_exc_info::operator<): Make const.
(ada_exc_info::operator==): Make const.
* ada-lang.c (ada_exc_info::operator<, ada_exc_info::operator==):
Make const.

gdb/ChangeLog
gdb/ada-lang.c
gdb/ada-lang.h

index ed5d20c565c46c8b405eb7bebd25f323cc4cb3ef..9bdb6f8fe267cf368da7b9964bf2b07b20899221 100644 (file)
@@ -1,3 +1,11 @@
+2017-10-02  Tom Tromey  <tom@tromey.com>
+           Pedro Alves  <palves@redhat.com>
+
+       * ada-lang.h (ada_exc_info::operator<): Make const.
+       (ada_exc_info::operator==): Make const.
+       * ada-lang.c (ada_exc_info::operator<, ada_exc_info::operator==):
+       Make const.
+
 2017-09-29  Tom Tromey  <tom@tromey.com>
 
        * target.c (read_whatever_is_readable): Change type of "result".
index 7e9f06cde6a7f6f4dc50a50254c6c120847c0c5d..1a0c76959481c6f075694a12bc50d67f5b699fa3 100644 (file)
@@ -13123,7 +13123,7 @@ ada_is_non_standard_exception_sym (struct symbol *sym)
    by exception address.  */
 
 bool
-ada_exc_info::operator< (const ada_exc_info &other)
+ada_exc_info::operator< (const ada_exc_info &other) const
 {
   int result;
 
@@ -13136,7 +13136,7 @@ ada_exc_info::operator< (const ada_exc_info &other)
 }
 
 bool
-ada_exc_info::operator== (const ada_exc_info &other)
+ada_exc_info::operator== (const ada_exc_info &other) const
 {
   return addr == other.addr && strcmp (name, other.name) == 0;
 }
index f92b88d8e302cfe3039df281a612a3bf2a1abdf5..a47fe828f4f2a19069b135058b0b3552c59963d5 100644 (file)
@@ -387,8 +387,8 @@ struct ada_exc_info
   /* The address of the symbol corresponding to that exception.  */
   CORE_ADDR addr;
 
-  bool operator< (const ada_exc_info &);
-  bool operator== (const ada_exc_info &);
+  bool operator< (const ada_exc_info &) const;
+  bool operator== (const ada_exc_info &) const;
 };
 
 extern std::vector<ada_exc_info> ada_exceptions_list (const char *regexp);