FL
a écrit :
Déjà, il est plus pointilleux lors de comparaisons signed/unsigned.
Et il a raison de l'être, tu peux faire pas mal de bêtises avec ça.
Ensuite :
SetIntVec(AUTO_INT_1, DUMMY_HANDLER) ; -> dereferencing type-punned pointeur will break strict antialising rules
C'est un problème des headers de
TIGCCLIB. Le problème existe avec toutes les versions 3.x de
GCC (même s'il n'y a pas de warning), mais il ne peut être corrigé facilement qu'avec
GCC 3.3. (Les versions précédentes de
GCC ne comprennent pas l'attribut
may_alias.) Voici le patch à appliquer:
diff -Naur Include.old/C/gray.h Include/C/gray.h
--- Include.old/C/gray.h Mon Dec 16 02:00:34 2002
+++ Include/C/gray.h Thu Dec 26 21:38:02 2002
@@ -47,7 +47,7 @@
enum GrayPlanes{LIGHT_PLANE=0,DARK_PLANE=1};
#ifndef __HAVE_INT_HANDLER
#define __HAVE_INT_HANDLER
-typedef struct{short foo;}_DEREF_INT_HANDLER,*INT_HANDLER;
+typedef struct{short foo;}__attribute__((__may_alias__))_DEREF_INT_HANDLER,*INT_HANDLER;
#endif
#define GrayAdjust(x) ((void)(*(volatile unsigned char*)0x600013=128-(signed char)(x)))
#define GrayCheckRunning() (!!__gray_handle)
diff -Naur Include.old/C/intr.h Include/C/intr.h
--- Include.old/C/intr.h Mon Dec 16 02:00:40 2002
+++ Include/C/intr.h Thu Dec 26 21:38:16 2002
@@ -19,7 +19,7 @@
#endif
#ifndef __HAVE_INT_HANDLER
#define __HAVE_INT_HANDLER
-typedef struct{short foo;}_DEREF_INT_HANDLER,*INT_HANDLER;
+typedef struct{short foo;}__attribute__((__may_alias__))_DEREF_INT_HANDLER,*INT_HANDLER;
#endif
enum IntVecs{AUTO_INT_1=0x64,AUTO_INT_2=0x68,AUTO_INT_3=0x6C,AUTO_INT_4=0x70,AUTO_INT_5=0x74,AUTO_INT_6=0x78,AUTO_INT_7=0x7C,TRAP_0=0x80,TRAP_1=0x84,TRAP_2=0x88,TRAP_3=0x8C,TRAP_4=0x90,TRAP_5=0x94,TRAP_6=0x98,TRAP_7=0x9C,TRAP_8=0xA0,TRAP_9=0xA4,TRAP_10=0xA8,TRAP_11=0xAC,TRAP_12=0xB0,TRAP_13=0xB4,TRAP_14=0xB8,TRAP_15=0xBC,INT_VEC_RESET=0x04,INT_VEC_BUS_ERROR=0x08,INT_VEC_ADDRESS_ERROR=0x0C,INT_VEC_ILLEGAL_INSTRUCTION=0x10,INT_VEC_ZERO_DIVIDE=0x14,INT_VEC_CHK_INS=0x18,INT_VEC_TRAPV_INS=0x1C,INT_VEC_PRIVILEGE_VIOLATION=0x20,INT_VEC_TRACE=0x24,INT_VEC_LINE_1010=0x28,INT_VEC_LINE_1111=0x2C,INT_VEC_UNINITIALIZED_INT=0x3C,INT_VEC_SPURIOUS_INT=0x60,INT_VEC_KEY_PRESS=0x68,INT_VEC_LINK=0x70,INT_VEC_ON_KEY_PRESS=0x78,INT_VEC_STACK_OVERFLOW=0x7C,INT_VEC_INT_MASK=0x84,INT_VEC_MANUAL_RESET=0x88,INT_VEC_OFF=0x90,INT_VEC_SELF_TEST=0xA8,INT_VEC_ARCHIVE=0xAC,INT_VEC_ER_THROW=0xBC};
#define AUTO_INT(IntNo) ((long)(IntNo)*4+0x60)