[Bug c++/43680] New: G++ is too aggressive in optimizing away bounds checking with enums

jason at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Wed Apr 7 21:51:00 GMT 2010


With -O2, this testcase aborts on x86_64:

extern "C" void abort ();

enum E { A, B, C, D };

void
CheckE(const E value)
{
  long v = value;
  if (v <= D)
    abort ();
}

int main() {
  CheckE(static_cast<E>(5));
}

Presumably something in the middle- or back-end is believing what the C++ front
end sets TYPE_MAX_VALUE to and optimizing based on the assumption that "value"
cannot be greater than 3.

I think the C++ standard can definitely be read to allow this optimization, but
it means optimizing away bounds checking, which is a serious security problem. 
The standard should be fixed.


-- 
           Summary: G++ is too aggressive in optimizing away bounds checking
                    with enums
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: jason at gcc dot gnu dot org
        ReportedBy: jason at gcc dot gnu dot org
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43680



More information about the Gcc-bugs mailing list