Обсуждение: [patch] test failure on sparc64 due to undefined division by zero behaviour

Поиск
Список
Период
Сортировка

[patch] test failure on sparc64 due to undefined division by zero behaviour

От
Martin Pitt
Дата:
Hello PostgreSQL hackers,

I recently got the following bug report about a test suite failure on
sparc64:

----- Forwarded message from Aurelien Jarno <aurel32@debian.org> -----

Date: Wed, 02 Mar 2011 23:49:05 +0100
From: Aurelien Jarno <aurel32@debian.org>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: Bug#616180: postgresql-9.0: FTBFS on sparc64, testsuite issues with int8

postgresql-9.0 fails to build on sparc64 due to testsuite errors with
int8. The division by 0 is not trapped and a SIGFPE is issued instead of
an error.

Postgresql people claims it's a gcc bug, while gcc people says the code
is incorrect [1]. Whatever the real issue is, the fix is very simple
(actually taken in another part from the very same file), so it's
probably the best to simply apply it.

[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29968

----- End forwarded message -----


The C99 standard [2], section 6.5.5 paragraph 5 actually says:

  "The result of the / operator is the quotient from the division of
  the first operand by the second; the result of the % operator is the
  remainder. In both operations, if the value of the second operand is
  zero, the behavior is undefined."

so the gcc folk's claim that this isn't a gcc bug looks justified.

Aurelien sent a straightforward patch for this, I updated it to apply
to current git head, updated the comments, and git-formatted it.

Thanks for considering!

Martin

[2] http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
--
Martin Pitt                        | http://www.piware.de
Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)

Вложения

Re: [patch] test failure on sparc64 due to undefined division by zero behaviour

От
Tom Lane
Дата:
Martin Pitt <mpitt@debian.org> writes:
> The C99 standard [2], section 6.5.5 paragraph 5 actually says:

>   "The result of the / operator is the quotient from the division of
>   the first operand by the second; the result of the % operator is the
>   remainder. In both operations, if the value of the second operand is
>   zero, the behavior is undefined."

> so the gcc folk's claim that this isn't a gcc bug looks justified.

The gcc guys are full of it.  The issue that is relevant here is the C
standard's definition of sequence points, and in particular the
requirement that visible side effects of a later statement cannot happen
before the execution of an earlier function call.  The last time I
pestered them about this, I got some lame claim that a SIGFPE wasn't a
side effect within the definitions of the spec.  At that point useful
discussion stopped, because it's impossible to negotiate with someone
who's willing to claim that.

> Aurelien sent a straightforward patch for this, I updated it to apply
> to current git head, updated the comments, and git-formatted it.

Hmm ... I'm willing to put in the extra return statements, but not to
remove the comments that we're working around a gcc bug.  In particular,
given the gcc folks' claim that they need not consider the timing of
program-generated signals, there is really nothing to stop them from
trying to push the division up before the return too.  This is nothing
but a band-aid for a non-standards-compliant optimizer.

            regards, tom lane