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]

Re: [Bug c++/37281] New: bad code generation with enum and -m32


This code is undefined as the value of 32 is outside the range of the enum.

Sent from my iPhone

On Aug 29, 2008, at 9:29, "gmorin1 at bloomberg dot net" <gcc-bugzilla@gcc.gnu.org > wrote:

This is a copy of a Debian report that I made (I thought I might as well report
it directly here too): http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=496965


g++ generates bad code for this program on an amd64 machine. It works with
fine in 64-bit and with older versions of gcc.


#include <stdlib.h>
struct MyTypes {
   enum Type {
       NOVALUE = 1,
       VALUE   = 30,
       VALUE2 = 31,
       VALUE3 = -3
   };

   static bool isValue(MyTypes::Type value);
};

bool MyTypes::isValue(MyTypes::Type value)
{
   switch (value) {
     case MyTypes::VALUE:
     case MyTypes::VALUE2:
     case MyTypes::VALUE3: {
       return true;
     }
     default: {
       return false;
     }
   }
}

int main(int argc, char *argv[])
{
   if (true == MyTypes::isValue(MyTypes::Type(32))) {
       abort();
   }
   return 0;
}

guillaum@canard:~$ g++ -m32 -Wall -o e enumtest.cpp
guillaum@canard:~$ ./e
Aborted
guillaum@canard:~$ g++ -Wall -o e enumtest.cpp
guillaum@canard:~$ ./e
guillaum@canard:~$ g++-4.2 -m32 -Wall -o e enumtest.cpp
guillaum@canard:~$ ./e
guillaum@canard:~$ g++-4.1 -m32 -Wall -o e enumtest.cpp
guillaum@canard:~$ ./e

It works with -O2 though (not -O1):
guillaum@canard:~$ g++ -O2 -m32 -Wall -o e enumtest.cpp
guillaum@canard:~$ ./e


-- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable') Architecture: amd64 (x86_64)


-- Summary: bad code generation with enum and -m32 Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: gmorin1 at bloomberg dot net


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




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