This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/39488] New: ARM ABI: enum comparison against zero optimized away


With ARM ABI variant selected by -fno-short-enums the compare shouldn't
be optimized away:

  enum RC { X, Y, Z };
  int check_error(enum RC a) { return a < 0; }

C 6.3#2 guarantees that any value of the compatible type can be assigned
to and from values of the enumerator type "with no change to the value or
the representation".  So if the implementation defines the compatible 
type to be a signed type (which ARM ABI -fno-short-enums does in this case,
see AAPCS 7.1.3), objects of the enumerator type can validly have negative
values and the test is not redundant.  (Of course, a strictly conforming
program cannot rely on this or any other property of the ABI.)

(Aside: this optimization is valid for C++, following 7.2#6.)


-- 
           Summary: ARM ABI: enum comparison against zero optimized away
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: algrant at acm dot org
GCC target triplet: arm-none-eabi-gcc


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]