On Mon, 20 Feb 2012, Richard Guenther wrote:
On Thu, 16 Feb 2012, Marc Glisse wrote:
Hello,
some tests currently fail on gmpxx with g++-3.4 (on shell). This is due to a
bug in g++-3.4, which for l=2 says the following is true:
__builtin_constant_p(l) && (l == 0)
it is interesting to insert a printf statement that prints both l and l==0 and
have it print 2 and true :-/
Not for me.
int main () { int l = 2; if (__builtin_constant_p (l) && (l == 0)) return
1; return 0; }
Did you try getting a snapshot of the gmp repos and running the c++
testsuite? Yes, your simple example passes, but you know better than I do
how much the context matters for optimizations. And since the bug doesn't
seem reproducible with more recent versions of gcc, there is little
motivation to reduce the failing tests.
The failing compiler was 3.4.6, from ports on freebsd 8.1, with -O2 -m64.
4.2.5 seems good.
In gmpxx.h, you can do this change:
struct __gmp_binary_lshift // LINE 425
{
static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l)
{
if (__GMPXX_CONSTANT(l) && (l == 0))
{
std::cerr << l << '\n'; // NEW LINE
if (z != w) mpz_set(z, w);
}
(and replace <iosfwd> with <iostream> at the beginning)
and wonder why it prints "2"...
--
Marc Glisse
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
http://gmplib.org/mailman/listinfo/gmp-devel