Ralf Corsepius
Es handelt sich um ältern Code auf extremer Low-Level-Ebene, etwa von folgender Bauart:
static inline void hash_insert(int* hash, int key1, int key2, void** el);
... somestruct1 *e1; e1 = (somestruct*) malloc(sizeof(somestruct1)); hash_insert(hash,key1,key2,(void**) &e1);
somestruct2 *e2; e2 = (somestruct2*) malloc(sizeof(somestruct2)); hash_insert(hash,key1,key2,(void**) &e2); ...
GCC bemeckert die (void**) Casts.
Zu Recht. Aber wie ich in meiner ersten Mail schon schrieb, ist dieser Fall nun sehr einfach: static inline void hash_insert(int* hash, int key1, int key2, void* elp) { void **el = (void **)elp; [ ... ] } somestruct1 *e1; e1 = (somestruct*) malloc(sizeof(somestruct1)); hash_insert(hash,key1,key2, &e1); Und schon passt alles, der Compiler warnt nicht mehr und Alias basierte Optimierung wird auch durchgeführt.
und -fstrict-aliasing eingeschaltet hast. Das habe ich eben nicht explizit eingeschaltet. Es mag sein, dass es der Compiler implizit irgendwo einschaltet, wäre mir aber neu.
Tut er seit 3.3 mit -O2. Philipp