bug: pointer subtraction not commutative in egcs-1.0
Raymond Nijssen
raymond@magma-da.com
Mon Dec 29 11:07:00 GMT 1997
BTW: a previous bug report did not show up on the bugs archive web page.
Should I resend it?
> cat bug3.cxx
// this program appears to trigger a bug in egcs-1.0 causing
// it to violate the invariant of commutativity of pointer
// arithmetic. Perhaps some kind of adjustment problem.
#include <stdio.h>
#include <assert.h>
struct F {
int i;
};
F f;
int main( int, char** ) {
int F:: *of;
int *i = (int *) &of;
of = &F::i;
F *b = ((F*) ((int) &f.i - *i));
F *a = &f;
printf("%d\n", a-b);
printf("%d\n", b-a);
assert( (a-b) == -(b-a) ); // will fail with egcs-1.0
return 0;
}
> /usr/local/egcs-1.0/bin/g++ -v -Wall bug3.cxx
Reading specs from
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/specs
gcc version egcs-2.90.21 971202 (egcs-1.00 release)
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/cpp
-lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus
-D__GNUC_MINOR__=90 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__
-D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix
-Asystem(unix) -Asystem(svr4) -D__EXCEPTIONS -Wall -D__GCC_NEW_VARARGS__
-Acpu(sparc) -Amachine(sparc) bug3.cxx /var/tmp/cca000ex.ii
GNU CPP version egcs-2.90.21 971202 (egcs-1.00 release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/egcs-1.0
/usr/local/include
/usr/local/egcs-1.0/sparc-sun-solaris2.5.1/include
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/include
/usr/include
End of search list.
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/cc1plus
/var/tmp/cca000ex.ii -quiet -dumpbase bug3.cc -Wall -version -o
/var/tmp/cca000ex.s
GNU C++ version egcs-2.90.21 971202 (egcs-1.00 release)
(sparc-sun-solaris2.5.1) compiled by GNU C version 2.7.2.3.
/usr/ccs/bin/as -V -Qy -s -o /var/tmp/cca000ex1.o /var/tmp/cca000ex.s
/usr/ccs/bin/as: SC4.2 dev 30 Nov 1995
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/ld
-V -Y P,/usr/ccs/lib:/usr/lib -Qy
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/crt1.o
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/crti.o
/usr/ccs/lib/values-Xa.o
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/crtbegin.o
-L/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21
-L/usr/local/egcs-1.0/sparc-sun-solaris2.5.1/lib -L/usr/ccs/bin
-L/usr/ccs/lib -L/usr/local/egcs-1.0/lib /var/tmp/cca000ex1.o -lstdc++
-lm -lgcc -lc -lgcc
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/crtend.o
/usr/local/egcs-1.0/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.21/crtn.o
ld: Software Generation Utilities (SGU) SunOS/ELF (LK-2.0 (S/I) -
versioning)
> ./a.out
0
-1
bug3.cxx:23: failed assertion `(a-b) == -(b-a)'
IOT trap (core dumped)
>
--
Raymond Nijssen
Magma Design Automation
1025A Terra Bella Av., Mountain View, CA 95124
(650) 938-6790
More information about the Gcc-bugs
mailing list