On Wed, 2003-09-10 at 16:09, Vinzent Hoefler wrote:
Hi, at 15:03 10.09.03, Ralf Corsepius wrote:
GCC-3.3.x liefert gelegentlich folgende Warnung:
warning: dereferencing type-punned pointer will break strict-aliasing rules
Was will mir diese Warnung sagen?
Dass Du unanstaendige Dinge tust
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.
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.
Wenn gcc schon warnt, wie sähen die Folgen aus, falls etwas "zerbricht"?
Das Programm liefert unerwartete (sogenannte "falsche") Resultate. Gegenfrage: Warum schaltest Du eigentlich eine Option ein von der Du nicht weisst, was sie bedeutet? Ich habe -fstrict-aliasing nicht explizit eingestaltet! Wenn ich es hätte, hätte ich sehr wahrscheinlich auch gcc.info dazu gelesen.
Ralf