<div dir="ltr">Re-adding list.<div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 26, 2016 at 10:38 PM, Peter Collingbourne <span dir="ltr"><<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Wed, Oct 26, 2016 at 9:43 PM, Chris Lattner <span dir="ltr"><<a href="mailto:clattner@apple.com" target="_blank">clattner@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span>On Oct 26, 2016, at 10:10 AM, Chandler Carruth <<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>> wrote:<br></span><div><span><blockquote type="cite"><br class="m_-4725440978954035431m_5208025862451949833Apple-interchange-newline"><div><div dir="ltr">To what Reid said, I'm not really worried about impact on the middle end of any of this. We can handle the code changes, etc.<div><br></div><div>I agree with Chris about what we're trading off here:<br><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 25, 2016 at 10:48 PM Chris Lattner via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="m_-4725440978954035431m_5208025862451949833gmail_msg"><div class="m_-4725440978954035431m_5208025862451949833gmail_msg">I’d argue the other side of it.  The quality of the code is higher if we have invariants (like all globals are pointers) because that simplifies assumptions by eliminating cases where “is a pointer” appears to be true, but isn’t actually true in all cases.  I’m not an expert on CFI or how widely it will ultimately impact the compiler hacker consciousness, but I’m pretty sure that the current model for globals and functions will remain more prominent.  If you choose to break this invariant, you’ll be continually swimming upstream against assumptions made throughout the compiler, both in code written today but also in code written in the future.<br class="m_-4725440978954035431m_5208025862451949833gmail_msg"></div></div></blockquote><div><br></div><div>I agree that mental assumptions the developers on the middle end hold are the primary challenge here. But I think we are going to run into challenges either way.</div><div><br></div><div>If the type of these entities is an integer, we will have a non-pointer global, yes. But as Peter points out, this is caught effectively by asserts in the cast infrastructure and other programming aids. Essentially, the checking of LLVM's type system helps protect the random middle end developer from getting this wrong.</div><div><br></div><div>On the other hand, if the type of these entities remains consistently pointers, we will still break assumptions that middle end developers routinely make about pointers to globals:</div><div>- They aren't dereferencable</div><div>- They aren't aligned</div><div>- They may be null</div><div>- The difference between them might not be representable in a pointer-sized-integer</div></div></div></div></div></blockquote><div><br></div></span><div>Aren’t all these true of “inttoptr’d” integer constants already?  This is already part of the model for things that are PointerType’s, so I don’t see how either resolution would change that.</div></div></div></blockquote><div><br></div></span><div>For at least assumptions 1 and 3 this may be true right now for most values of type PointerType, but not necessarily for GlobalVariables of type PointerType.</div><div><br></div><div>Thanks,</div></div><span class="HOEnZb"><font color="#888888">-- <br><div class="m_-4725440978954035431gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</font></span></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div></div>