<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Aug 27, 2015 at 3:49 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@gmail.com" target="_blank">rjmccall@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">rjmccall added inline comments.<br>
<br>
================<br>
Comment at: include/clang/Driver/Options.td:990<br>
@@ -988,2 +989,3 @@<br>
            "value range">;<br>
+def fstrict_vptrs: Flag<["-"], "fstrict-vptrs">, Group<f_Group>, Flags<[CC1Option]>;<br>
 def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group<f_Group>;<br>
----------------<br>
This needs documentation for the --help output, something like "Enable optimizations based on the strict rules for overwriting polymorphic C++ objects".<br>
<br>
This option should eventually be promoted to be a driver option, so we might as well figure out the name now.  I'd rather not introduce "vptr" to the user lexicon.  I suggest -fstrict-vtable-pointers.<br>
<span class=""><br>
================<br>
Comment at: lib/CodeGen/CGClass.cpp:1279<br>
@@ +1278,3 @@<br>
+  if (CGM.getCodeGenOpts().StrictVPtrs && BaseVPtrsInitialized)<br>
+    CXXThisValue = Builder.CreateInvariantGroupBarrier(LoadCXXThis());<br>
+<br>
----------------<br>
</span><span class="">Prazek wrote:<br>
> rjmccall wrote:<br>
> > Should this just be in InitializeVTablePointers?<br>
> I want to add invariant.group.barrier only if it's needed. F.e. I don't want to put before I initialize vptrs for base, or when my class doesn't inherit frome anything. I want emit barrier after I will initialize some other vptrs.<br>
><br>
> InitializeVptrs is called in EmitBaseInitializer, and also I woudnt want to put some extra flag if it must produce barrier or not (because it is hard to distinguish it from inside)<br>
</span>Fair enough.<br>
<br>
Do we need to emit these barriers in unoptimized builds?<br></blockquote><div><br></div><div>Yes, I think so, since we want to be able to LTO together optimized and unoptimized code.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
================<br>
Comment at: lib/CodeGen/CGClass.cpp:1487<br>
@@ +1486,3 @@<br>
+    if (!CanSkipVTablePointerInitialization(getContext(), Dtor)) {<br>
+      // Inserting llvm.invariant.group.barrier intrinsic before base vptrs<br>
+      // initialization to stop propagating previous vptr value.<br>
----------------<br>
Grammar: "Insert the llvm.invariant.group.barrier intrinsic before initializing the vptrs to cancel any previous assumptions we might have made."<br>
<br>
<br>
<a href="http://reviews.llvm.org/D12312" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12312</a><br>
<br>
<br>
<br>
</blockquote></div><br></div></div>