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