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]

Issues with testsuite on constant pointer arithmetics


Hi all,

I'm reaching the final stages of my port of gcc to a custom microcontroller
and at this point real world examples seem to work, I only have a few dozen
tests of the testsuite which give me trouble.

All those tests involve arithmetics on pointers (or labels), and I'm not
sure if the tests show a real problem in my port or if the tests are not
relevant given the specifics of my microcontroller (size of pointers not
being a "long", "int" not being a natural register etc).

Before going further, a bit of background: this microcontroller is special
in that it can be configured to work in 4 different modes: 8 bit "wide",
16 bit, 16 bit "wide" and 32 bits.

The code below speaks for itself:

#define BITS_PER_UNIT		8
#define UNITS_PER_WORD		(TARGET_8W ? 1 : (TARGET_16 || TARGET_16W) ? 2 : 4)
#define SHORT_TYPE_SIZE         16
#define INT_TYPE_SIZE           16
#define LONG_TYPE_SIZE          32
#define LONG_LONG_TYPE_SIZE     64
#define FLOAT_TYPE_SIZE         32
#define DOUBLE_TYPE_SIZE        64
#define LONG_DOUBLE_TYPE_SIZE   64
#define SIZE_TYPE               "unsigned int"
#define PTRDIFF_TYPE_SIZE       ((TARGET_8W || TARGET_16) ? "int" : "long int")
#define Pmode			((TARGET_8W || TARGET_16) ? HImode : SImode)
#define POINTER_SIZE		((TARGET_8W || TARGET_16) ? 16 : 32)

Now, back to my problems: the following tests fail with
"error: initializer element is not constant":

on TARGET_8W and TARGET_16:
920928-1.c:
	1 struct{int c;}v;
	2 static long i=((char*)&(v.c)-(char*)&v)
930326-1.c:
	1 struct
	2 {
	3   char a, b, f[3];
	4 } s;
	5
	6 long i = s.f-&s.b;
labels-3.c:
	 9 int foo (int a)
	10 {
	11   static const short ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
	12   void *p = &&l1 + ar[a];
	13   goto *p;
	14  l1:
	15   return 1;
	16  l2:
	17   return 2;
	18 }

on TARGET_16W and TARGET_32: 20011114-1.c:
	1 extern void _text;
	2 static __SIZE_TYPE__ x = (__SIZE_TYPE__) &_text - 0x10000000L - 1;

Are those tests expected to fail on my port or is that something I've
obviously done wrong ?

Thanks.

Stelian.
-- 
Stelian Pop <stelian@popies.net>


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