diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4d3c3ecb19..20ab7a96eb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-10-24 Joel Brobecker + + * doublest.c (convert_doublest_to_floatformat): Fix comparison + against maximum exponent value. + 2012-10-24 Joel Brobecker * ada-lang.h (ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS): Add entry for diff --git a/gdb/doublest.c b/gdb/doublest.c index f683002020..0308dac619 100644 --- a/gdb/doublest.c +++ b/gdb/doublest.c @@ -483,7 +483,7 @@ convert_doublest_to_floatformat (CONST struct floatformat *fmt, goto finalize_byteorder; } - if (exponent + fmt->exp_bias >= (1 << fmt->exp_len) - 1) + if (exponent + fmt->exp_bias >= (1 << fmt->exp_len)) { /* The value is too large to fit into the destination. Treat as infinity. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a7a1180365..633c0abb20 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-10-24 Joel Brobecker + + * gdb.base/ldbl_e308.c, gdb.base/ldbl_e308.exp: New files. + 2012-10-24 Joel Brobecker * gdb.ada/unc_arr_ptr_in_var_rec: New testcase. diff --git a/gdb/testsuite/gdb.base/ldbl_e308.c b/gdb/testsuite/gdb.base/ldbl_e308.c new file mode 100644 index 0000000000..8bbe01b49a --- /dev/null +++ b/gdb/testsuite/gdb.base/ldbl_e308.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2012 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +long double ldbl_308 = 2.0; + +int +main (void) +{ + ldbl_308 = ldbl_308 / 2; + + return 0; +} diff --git a/gdb/testsuite/gdb.base/ldbl_e308.exp b/gdb/testsuite/gdb.base/ldbl_e308.exp new file mode 100644 index 0000000000..89c54b5b57 --- /dev/null +++ b/gdb/testsuite/gdb.base/ldbl_e308.exp @@ -0,0 +1,31 @@ +# Copyright (C) 2012 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +set testfile ldbl_e308 +set srcfile ${testfile}.c +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { + return -1 +} + +if ![runto_main] { + untested ${testfile}.exp + return -1 +} + +gdb_test_no_output "set variable ldbl_308 = 1.6e+308l" + +gdb_test "print ldbl_308" \ + "= (1\..*e\\+308|inf)" +