This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C as intermediate language, signed integer overflow and -ftrapv


On Thu, Jul 24 at 10:36 PM, Richard Biener <richard.guenther@gmail.com> wrote:
> Fact is that if somebody is interested in
> -ftrapv he/she is welcome to contribute patches.  Especially testing
> coverage is poor.

As I said I have test programs for integer overflow (not written
in C). Now I have converted one test program to C. This program
checks if an int64_t overflow raises SIGABRT or SIGILL. The name of
the program is chkovf64.c and I have uploaded it to

  http://sourceforge.net/projects/seed7/files/

It is licenced with GPL. You can use it to improve the testing
coverage of gcc. When I compile it with:

  gcc -ftrapv chkovf64.c -o chkovf64

it writes a lot of warnings about "integer overflow in expression".
Running chkovf64 shows that -ftrapv does not work correct.
It seems that gcc thinks that writing a warning is enough and
raising a signal at runtime is not necessary. For human
programmers this makes sense, since they read the warnings and
correct the code. But for generated C programs this is not the
right strategy. There are different needs when C is used as
intermediate language.

Maybe all -ftrapv problems uncovered by chkovf64.c are because
of this. Unfortunately there are also other test cases where
a signal is not raised although a signed integer overflow occurred.
This happens in a much bigger program and until now I was not
able to create a simple test case from it.

I used clang version 3.4-1 to proof that chkovf64.c works correct.
When I compile it with:

  clang -ftrapv chkovf64.c -o chkovf64

and start chkovf64 afterwards it writes:

Overflow checking of negation works correct.
Overflow checking of addition works correct.
Overflow checking of addition assignment works correct.
Overflow checking of subtraction works correct.
Overflow checking of subtraction assignment works correct.
Overflow checking of incr works correct.
Overflow checking of decr works correct.
Overflow checking of multiplication works correct.
Overflow checking of multiplication assignment works correct.

Greetings Thomas Mertes

--
Seed7 Homepage:  http://seed7.sourceforge.net
Seed7 - The extensible programming language: User defined statements
and operators, abstract data types, templates without special
syntax, OO with interfaces and multiple dispatch, statically typed,
interpreted or compiled, portable, runs under linux/unix/windows.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]