[LLVMbugs] [Bug 19346] New: adding zero to null pointer rejected in constant expressions

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Apr 4 11:21:36 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=19346

            Bug ID: 19346
           Summary: adding zero to null pointer rejected in constant
                    expressions
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++11
          Assignee: unassignedclangbugs at nondot.org
          Reporter: zilla at kayari.org
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

constexpr int* p = nullptr;
constexpr int n = 0;
constexpr int* p2 = p + n;

a.cc:3:16: error: constexpr variable 'p2' must be initialized by a constant
expression
constexpr int* p2 = p + n;
               ^    ~~~~~
a.cc:3:23: note: cannot perform pointer arithmetic on null pointer
constexpr int* p2 = p + n;
                      ^

Th last paragraph of [expr.add] says "If the value 0 is added to or subtracted
from a pointer value, the result compares equal to the original pointer value."
 I believe that should also apply for a null pointer.

Rejecting this makes it more awkward to define end() in the code below:

struct initializer_list {
  constexpr initializer_list() : b(nullptr), sz(0) { }
  constexpr int* begin() const { return b; }
  constexpr int* end() const { return b+sz; }
  int* b;
  unsigned sz;
};

constexpr initializer_list il;
constexpr int* p = il.end();

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140404/217f4d95/attachment.html>


More information about the llvm-bugs mailing list