On Fri, 2007-03-02 at 11:30 +0000, Richard W.M. Jones wrote: > I'm currently trying to get libvirt to compile with -Werror. One > problem which came up early is the warning in $SUBJECT. The gcc info > page (see -fstrict-aliasing) is pretty unclear about what exactly causes > this problem, so the attached patch rewrites the code quite > conservatively to avoid the problem. Uggh, -fstrict-aliasing is the bane of all our lives. Whoever thought it was a good idea? Wonder how much this optimisation actually gives us? Is it enough to justify all this? Grr. (Deep breath) Does something like this work: struct _virDriver { const char *name; }; struct _virDomainDriver { struct _virDriver base; int no; unsigned long ver; virDrvOpen open; }; struct _virNetworkDriver { struct _virDriver base; virDrvOpen open; }; static int _virRegisterDriver(virDriver *driver, int isNetwork) { virDriver *drivers; drivers = (virDriver *) isNetwork ? virNetworkDriverTab : virDriverTab; ... } I started re-factoring qemud like this so as to have a base object from which domains and networks derive so that we don't have to have as much copied and pasted code between the two, but it's a pretty big task. Cheers, Mark.