gdb: fix unittests/gmp-utils-selftests.c build on solaris
authorSimon Marchi <simon.marchi@polymtl.ca>
Fri, 20 Nov 2020 16:17:33 +0000 (11:17 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Fri, 20 Nov 2020 16:19:38 +0000 (11:19 -0500)
When building on solaris (gcc farm machine gcc211), I get:

      CXX    unittests/gmp-utils-selftests.o
    /export/home/simark/src/binutils-gdb/gdb/unittests/gmp-utils-selftests.c: In function 'void selftests::gdb_mpz_read_all_from_small()'  :
    /export/home/simark/src/binutils-gdb/gdb/unittests/gmp-utils-selftests.c:128:43: error: call of overloaded 'pow(int, int)'   is ambiguous
       LONGEST l_min = -pow (2, buf_len * 8 - 1);
                                               ^
    In file included from /opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/math.h:22:0,
                     from ../gnulib/import/math.h:27,
                     from /export/home/simark/src/binutils-gdb/gdb/unittests/gmp-utils-selftests.c:23:
    /opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/iso/math_iso.h:210:21: note: candidate: long double std::pow(long double, long double)
      inline long double pow(long double __X, long double __Y) { return
                         ^
    /opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/iso/math_iso.h:170:15: note: candidate: float std::pow(float, float)
      inline float pow(float __X, float __Y) { return __powf(__X, __Y); }
                   ^
    /opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/iso/math_iso.h:71:15: note: candidate: double std::pow(double, double)
     extern double pow __P((double, double));
                   ^

The "pow" function overloads only exist for float-like types, and the
compiler doesn't know which one we want.  Change "2" for "2.0", which
makes the compiler choose one alternative (the double one, I believe).

gdb/ChangeLog:

* unittests/gmp-utils-selftests.c (gdb_mpz_read_all_from_small):
Pass 2.0 to pow.
(gdb_mpz_write_all_from_small): Likewise.

Change-Id: Ied2ae0f01494430244a7c94f8a38b07d819f4213

gdb/ChangeLog
gdb/unittests/gmp-utils-selftests.c

index 91068603e7c92d11ffd590b5959e68b8d3033a5a..4663f56217940d32fa476f1584bd0cd2d01e1de6 100644 (file)
@@ -1,3 +1,9 @@
+2020-11-20  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * unittests/gmp-utils-selftests.c (gdb_mpz_read_all_from_small):
+       Pass 2.0 to pow.
+       (gdb_mpz_write_all_from_small): Likewise.
+
 2020-11-20  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * dwarf2/read.c (finish_fixed_point_type): Use std::abs instead
index e8c3c5c1cb5f6ee397322c56f27562fbc7ad7b64..af5bc65d2f94e5078c383bf206dfbbe389dc0dc5 100644 (file)
@@ -125,8 +125,8 @@ gdb_mpz_read_all_from_small ()
      to check the complete range.  */
 
   int buf_len = 1;
-  LONGEST l_min = -pow (2, buf_len * 8 - 1);
-  LONGEST l_max = pow (2, buf_len * 8 - 1) - 1;
+  LONGEST l_min = -pow (2.0, buf_len * 8 - 1);
+  LONGEST l_max = pow (2.0, buf_len * 8 - 1) - 1;
 
   for (LONGEST l = l_min; l <= l_max; l++)
     {
@@ -141,7 +141,7 @@ gdb_mpz_read_all_from_small ()
 
   /* Do the same as above, but with an unsigned type.  */
   ULONGEST ul_min = 0;
-  ULONGEST ul_max = pow (2, buf_len * 8) - 1;
+  ULONGEST ul_max = pow (2.0, buf_len * 8) - 1;
 
   for (ULONGEST ul = ul_min; ul <= ul_max; ul++)
     {
@@ -248,8 +248,8 @@ static void
 gdb_mpz_write_all_from_small ()
 {
   int buf_len = 1;
-  LONGEST l_min = -pow (2, buf_len * 8 - 1);
-  LONGEST l_max = pow (2, buf_len * 8 - 1) - 1;
+  LONGEST l_min = -pow (2.0, buf_len * 8 - 1);
+  LONGEST l_max = pow (2.0, buf_len * 8 - 1) - 1;
 
   for (LONGEST l = l_min; l <= l_max; l++)
     {
@@ -259,7 +259,7 @@ gdb_mpz_write_all_from_small ()
 
     /* Do the same as above, but with an unsigned type.  */
   ULONGEST ul_min = 0;
-  ULONGEST ul_max = pow (2, buf_len * 8) - 1;
+  ULONGEST ul_max = pow (2.0, buf_len * 8) - 1;
 
   for (ULONGEST ul = ul_min; ul <= ul_max; ul++)
     {