Divide by zero does not crash

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Threaded View
I noticed that my application does not crash when there is a divide by
zero.  For example, the following test code:

  int i;
  i = 10/0;
  printf("i = %d\n", i);

gives:

i = 0

It does not crash.

Is there a way to make the application crash when there is a divide by
zero?  I am running Linux 2.4.26 on a powerpc (MPC8248).  I compile
with powerpc-linux-gcc.

Re: Divide by zero does not crash

Quoted text here. Click to load it

Because it's a "div" operation on integer.

Quoted text here. Click to load it

Use float instead of int.

HTH...

        Dirk
--
Dirk Heinrichs          | Tel:  +49 (0)162 234 3408
Configuration Manager   | Fax:  +49 (0)211 47068 111
We've slightly trimmed the long signature. Click to see the full one.
Re: Divide by zero does not crash
Quoted text here. Click to load it

It's evaluated on compile time. So it can't crash (but it should result
in a compiler error or warning).

-Michael

Re: Divide by zero does not crash
On Feb 8, 7:48 am, Michael Schnell
Quoted text here. Click to load it

This does give a warning at compile time because the constant zero is
there.  What concerns me is when the denominator is a variable that
takes the value of zero while the application is running. There is
neither a compilation warning nor any indication that a divide by zero
is occurring when the application is running.

Re: Divide by zero does not crash

Quoted text here. Click to load it


The behavior of integer division by 0 is undefined per the C Language
standard and, hence, implementation-dependent.  On x86, division by 0
produces a hardware exception.  On x86 linux, this exception is presented
to the program as a signal.  However, a conforming implementation may
choose to do anything else that is convenient: nothing (leave quotient
unmodified), produce random value for the quotient, kill the process.

GH

Re: Divide by zero does not crash

Quoted text here. Click to load it


So PUT IN A TEST!!!
if (x==0)
{
   fprintf(stderr,"Divide by zero.\n");
   exit;
}
else
   i10%/x;


Re: Divide by zero does not crash
Quoted text here. Click to load it

The compiler could insert code that crashes (or produces a signal or
whatever behaviour is deemed appropriate) at run-time.  But it does
not, because the behaviour when not doing an evaluation at
compile-time is not to crash or produce a signal.  In contrast, on an
AMD64 box I also get a warning at compile-time, and a SIGFPE at
run-time.

Quoted text here. Click to load it

Yes, that's a property of the PowerPC archictecture.  AFAIK the theory
of the hardware designers was that the compiler should produce code
equivalent to:

q=n/d;
if (d == 0)
  raise(SIGFPE);

The idea is that the check would be performed during the latency of
the division, so it would usually not cost extra time.  So one could
make the hardware simpler by not putting in the check there.  I may be
confusing PowerPC with another RISC architecture (most likely MIPS)
wrt this aspect, though.

But obviously gcc does not do this (there does not even seem to be an
option to turn this on).  Do other C compilers for PowerPC (from IBM,
Apple or Motorola generate such code)?

Followups set to comp.os.linux.powerpc.

- anton
--
M. Anton Ertl                    Some things have to be seen to be believed
snipped-for-privacy@mips.complang.tuwien.ac.at Most things have to be believed to be seen
We've slightly trimmed the long signature. Click to see the full one.

Site Timeline