Bug finding problem
Frank Klemm
pfk@fuchs.offl.uni-jena.de
Wed Sep 5 12:38:00 GMT 2001
In C you have often Code like
--- example1 -----------------------------------------------
#ifdef SIZEOF_LONG==8
typedef int my_t; // 64 bit systems
#else
typedef long my_t // 16/32 bit systems
#endif
extern void foo ( my_t* ptr );
...
long var;
foo ( &var ); // bug, but well hidden on a 32 bit system
...
-----------------------------------------------------------
Although this is a serious bug you can't find this error until you try to
compile the code on a 64 bit system. You need 2 systems to compile-time-test
the code.
If you have more such constructs you need a lot of systems.
Is there any chance to make 'my_t' incompatible with it parent type
(like in Ada, where this is standard)? It would help to find a lot of
errors as early as possible.
--- example2 ----------------------------------------------
#include <stdint.h>
extern void foo ( int64_t* ptr );
...
long var;
foo ( &var ); // bug, but well hidden on a 64 bit system
...
-----------------------------------------------------------
It is a shame how long such flaws can survive in a language like C
which are not possible in some other languages.
BTW: The problem is originally introduced by the C-flaw "conditional
translation of source code". Hides bugs and makes source less readable.
--
Frank Klemm
More information about the Gcc
mailing list