<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 7, 2015, at 3:10 PM, Philip Reames <<a href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" class="">
  
  <div bgcolor="#FFFFFF" text="#000000" class="">
    <br class="">
    <div class="moz-cite-prefix">On 01/07/2015 12:05 PM, Matt Arsenault
      wrote:<br class="">
    </div>
    <blockquote cite="mid:8C98EC88-B695-4AB0-94DB-1E3BC62E76AB@gmail.com" type="cite" class="">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
      <br class="">
      <div class="">
        <blockquote type="cite" class="">
          <div class="">On Jan 7, 2015, at 2:55 PM, Philip Reames <<a moz-do-not-send="true" href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
            wrote:</div>
          <br class="Apple-interchange-newline">
          <div class="">
            <meta content="text/html; charset=utf-8" http-equiv="Content-Type" class="">
            <div bgcolor="#FFFFFF" text="#000000" class=""> <br class="">
              <div class="moz-cite-prefix">On 01/07/2015 11:52 AM, Matt
                Arsenault wrote:<br class="">
              </div>
              <blockquote cite="mid:AB31CCB0-C2EB-47DB-8C12-E657F97527ED@gmail.com" type="cite" class="">
                <meta http-equiv="Content-Type" content="text/html;
                  charset=utf-8" class="">
                <br class="">
                <div class="">
                  <blockquote type="cite" class="">
                    <div class="">On Jan 7, 2015, at 2:25 PM, Owen
                      Anderson <<a moz-do-not-send="true" href="mailto:resistor@mac.com" class="">resistor@mac.com</a>>
                      wrote:</div>
                    <br class="Apple-interchange-newline">
                    <div class="">
                      <meta http-equiv="content-type" content="text/html; charset=utf-8" class="">
                      <div dir="auto" class="">
                        <div class="">I'm not aware of any such
                          restriction, and I know of several LLVM based
                          systems that use address space 1 for something
                          other than that.<br class="">
                          <br class="">
                          -Owen</div>
                      </div>
                    </div>
                  </blockquote>
                  <div class=""><br class="">
                  </div>
                  <div class="">Yes, this would be a problem for us. We
                    use 1 for a normal address space where 0 is invalid.
                    However, we also have a problem where some other
                    address spaces do want 0 to be a valid address,
                    which just sort of don’t work correctly now.</div>
                </div>
              </blockquote>
              If you have an example with a null in a non-0 address
              space being mishandled, please file a bug.  We'll fix them
              as we find them.  <br class="">
            </div>
          </div>
        </blockquote>
        <div class=""><br class="">
        </div>
        <div class="">I think the problems aren’t so much that accessing 0
          doesn’t work (although I imagine there are problems with
          that), but expectations of comparison with null. The main
          problem I’m aware of is comparisons with null pointers. The
          first global object in addrspace(3) will have the address of
          0, so if a user does if (x != NULL), it will not behave as
          expected. For C I think this is supposed to be fixed by
          changing the value of NULL to -1, but I don’t think that is
          currently supported. That is also complicated because the null
          value is different for different address spaces, and I think
          the actual null pointer value must be 0 for C++. It doesn’t
          really turn up often in real code so I don’t think anybody has
          really spent time thinking about how to properly solve this.</div>
      </div>
    </blockquote>
    Just to make sure I'm interpreting this right: the problem is
    essentially that we hard code "null" to mean address 0 in all
    address spaces?  If we allowed the numeric value of null to be
    configurable per address space, would that resolve the issue at the
    LLVM IR level?<br class=""></div></div></blockquote><div><br class=""></div><div>Yes, it would. I’ve always imagined this to a be a large undertaking though</div><br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class="">
    <br class="">
    Solving the frontend/language spec problem seems out of scope for
    LLVM, though probably not for clang.  Can you point me to a usage of
    C++ with non-zero address spaces?  I'd be curious to know what's
    happening in this space.  <br class=""></div></div></blockquote><div><br class=""></div><div>There’s an AMD static C++ extension language, and a khronos draft for an OpenCL C++ kernel language which applies the same sort of restrictions and address spaces to C++ as OpenCL C has. Last time I looked at this I remember that C allows a non-zero null pointer value, but 0 must be implicitly converted to the correct null pointer value and the NULL macro will expand to this integer value. I don’t think the OpenCL C spec touches the issue of different NULL values for different address spaces, but does explicitly allow different sized pointers for each. I am less clear on what C++ requires, but C++11 4.10 says "A null pointer constant is an integral constant expression (5.19) prvalue of integer type that evaluates to zero or a prvalue of type std::nullptr_t."</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class="">
    <br class="">
    <blockquote cite="mid:8C98EC88-B695-4AB0-94DB-1E3BC62E76AB@gmail.com" type="cite" class="">
      <div class="">
        <div class=""><br class="">
        </div>
        <div class="">-Matt</div>
        <div class=""><br class="">
        </div>
        <br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div bgcolor="#FFFFFF" text="#000000" class="">
              <blockquote cite="mid:AB31CCB0-C2EB-47DB-8C12-E657F97527ED@gmail.com" type="cite" class="">
                <div class="">
                  <div class=""><br class="">
                  </div>
                  <div class="">-Matt</div>
                  <div class=""><br class="">
                  </div>
                  <div class=""><br class="">
                  </div>
                  <br class="">
                  <blockquote type="cite" class="">
                    <div class="">
                      <div dir="auto" class="">
                        <div class=""><br class="">
                          On Jan 7, 2015, at 1:18 PM, Philip Reames <<a moz-do-not-send="true" href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
                          wrote:<br class="">
                          <br class="">
                        </div>
                        <blockquote type="cite" class="">
                          <div class="">
                            <meta http-equiv="content-type" content="text/html; charset=utf-8" class="">
                            On the review for <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://reviews.llvm.org/D6808">http://reviews.llvm.org/D6808</a>,
                            <a moz-do-not-send="true" href="http://reviews.llvm.org/p/majnemer/" class=" phui-handle phui-link-person">majnemer</a>
                            commented that:<br class="">
                            <span class="transaction-comment" data-sigil="transaction-comment" data-meta="14_7">"Address space 1 has a
                              special meaning in LLVM, it's identical to
                              address space 0 except for the fact that
                              "null" may be dereferenced. You might want
                              to consider a different address space."<br class="">
                              <br class="">
                              This is the first I've heard of this and I
                              can't find any documentation about it
                              being reserved, either in general, or
                              specifically for x86.  Can anyone clarify?<br class="">
                              <br class="">
                              The only address spaces with special
                              meanings I know of are:<br class="">
                              - 0 (the normal address space, null is not
                              dereferencable)<br class="">
                              - 256 - TLS, GS relative addressing<br class="">
                              - 257 - FS relative addressing<br class="">
                              <br class="">
                              Philip<br class="">
                            </span> </div>
                        </blockquote>
                        <blockquote type="cite" class="">
                          <div class=""><span class="">_______________________________________________</span><br class="">
                            <span class="">LLVM Developers mailing list</span><br class="">
                            <span class=""><a moz-do-not-send="true" href="mailto:LLVMdev@cs.uiuc.edu" class="">LLVMdev@cs.uiuc.edu</a>
                                      <a moz-do-not-send="true" href="http://llvm.cs.uiuc.edu/" class="">http://llvm.cs.uiuc.edu</a></span><br class="">
                            <span class=""><a moz-do-not-send="true" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span><br class="">
                          </div>
                        </blockquote>
                      </div>
                      _______________________________________________<br class="">
                      LLVM Developers mailing list<br class="">
                      <a moz-do-not-send="true" href="mailto:LLVMdev@cs.uiuc.edu" class="">LLVMdev@cs.uiuc.edu</a>
                              <a moz-do-not-send="true" href="http://llvm.cs.uiuc.edu/" class="">http://llvm.cs.uiuc.edu</a><br class="">
                      <a moz-do-not-send="true" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br class="">
                    </div>
                  </blockquote>
                </div>
                <br class="">
              </blockquote>
              <br class="">
            </div>
          </div>
        </blockquote>
      </div>
      <br class="">
    </blockquote>
    <br class="">
  </div>

</div></blockquote></div><br class=""></body></html>