Compiling this simple C++ program with 4.3 or 4.4:

#include <stddef.h>
const char* foo() { return new char[~static_cast<size_t>(0)]; }

gives this warning:

foo.cc: In function ‘const char* foo()’:
foo.cc:2: warning: large integer implicitly truncated to unsigned type

The warning is bogus: there is no truncation here.  It would be reasonable to
give a warning that the new would fail, but the warning it actually gives is
simply wrong.  I haven't looked into this much, but it seems to be related to
sizetype.

4.1 gives no warning.  I don't have 4.2 handy.


-- 
           Summary: [4.3,4.4 regression] Bogus "large integer implicitly
                    truncated" passing size_t constant to new
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ian at airs dot com


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

Reply via email to