Hi

When you compile w/o debugging (i.e. with optimisation)
the GCC spits whole-lotta stuff like that:

tclthread.c:401: warning: dereferencing type-punned pointer will break strict-aliasing rules tclthread.c:401: warning: dereferencing type-punned pointer will break strict-aliasing rules

The warning sems to trigger when a pointer is casted like this:

    enum {
        EAbsWaitIdx, EBroadcastIdx, ECreateIdx, EDestroyIdx, ESetIdx,
        ESignalIdx, ETimedWaitIdx, EWaitIdx
    } opt;

    if (!GetArgs(interp, objc, objv, opts, 'e', ECreateIdx,
                  (int *) &opt, (void **) &condPtr)) {
        return TCL_ERROR;

The "opt" and "condPtr" in GetArgs() are casted and it barks
at them. I cannot possibly imagine changing all code to
something like:

    enum {
        EAbsWaitIdx, EBroadcastIdx, ECreateIdx, EDestroyIdx, ESetIdx,
        ESignalIdx, ETimedWaitIdx, EWaitIdx
    } opt;
    int myOpt = (int)opt;

    if (!GetArgs(interp, objc, objv, opts, 'e', ECreateIdx,
                  &myOpt, (void **) &condPtr)) {
        return TCL_ERROR;

This would mean lots of work and may introduce errors.

I've read that you can use (starting with gcc 3.3) -fno-strict-aliasing
which would remove those warnings. But also, somebody said that the
effect of the "-O2" is gone in such cases (haven't be able to verify)

What to do?
Any ideas?

Zoran

Reply via email to