https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82296

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2017-09-22
                 CC|                            |tkoenig at gcc dot gnu.org
     Ever confirmed|0                           |1
           Severity|normal                      |enhancement

--- Comment #1 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
You have...

#define ARRAYSIZE 5
union {
        int numbers[ARRAYSIZE];
        int dummy[ARRAYSIZE+1];
} gMyUnion;

and then

                if (gMyUnion.numbers[i] > 5)
                        return 1;
                if (i == ARRAYSIZE)
                        fatal_error();
                i++;

The compiler is assuming that you never exceed the
bounds of gMyUnion.numbers. Threfore, i can never be 5,
and the call to fatal_error can never happen.

Change .numbers to .dummy, or move the check for i
before the other statement, and the change will not happen.

Is the compiler right to do so? Yes.

Should it warn if asked? IMHO yes (and it doesn't appear
to do so).

Confirmed as an enhancement request.

Reply via email to