<div dir="ltr"><br><br><div class="gmail_quote">On Tue Jan 20 2015 at 6:20:34 PM Duncan Exon Smith <<a href="mailto:dexonsmith@apple.com" target="_blank" class="cremed">dexonsmith@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="auto"><div><br></div><div><br>On Jan 20, 2015, at 3:48 AM, Timur Iskhodzhanov <<a href="mailto:timurrrr@google.com" target="_blank" class="cremed">timurrrr@google.com</a>> wrote:<br><br></div><blockquote type="cite"><div><span style="line-height:19.7999992370605px">Hi Duncan,</span><br style="line-height:19.7999992370605px"><br style="line-height:19.7999992370605px"><span style="line-height:19.7999992370605px">This has broken down "ninja check-asan" on 32-bit Windows.</span><br><div><div>Assertion failed: Context.hasReplaceableUses() && "Expected RAUW support", file C:\src\llvm_bot\slave\win\<u></u>build\llvm\include\llvm/IR/<u></u>Metadata.h, line 976</div></div></div></blockquote><div><br></div></div><div dir="auto"><div>Can you include the asan output?   A backtrace?   Point at a buildbot?   I don't have the tools to reproduce this. </div></div></blockquote><div><br></div><div>There's no public buildbot for ASan itself, but turns out this problem is not even specific to ASan.</div><div><br></div><div>This public bot just builds Chromium with Clang</div><div><a href="http://build.chromium.org/p/chromium.fyi/builders/CrWinClang/builds/1295/steps/compile/logs/stdio">http://build.chromium.org/p/chromium.fyi/builders/CrWinClang/builds/1295/steps/compile/logs/stdio</a></div><div><pre><span class="" style="color:rgb(0,0,0);font-family:'Courier New',courier,monotype;font-size:16px"><br class="">Assertion failed: isTemporary() && "Expected temporary node", file C:\b\build\slave\CrWinClang\build\src\third_party\llvm\include\llvm/IR/Metadata.h, line 741</span><span class="" style="font-size:16px;white-space:normal"><font face="Courier New, courier, monotype"></font></span></pre></div><div>since r226499.<br></div><div><br></div><div>OK, I'll try to minimize...</div><div>(I suppose the change looks sane at the first glance and you can't come up with a repro yourself)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="auto"><div><span style="line-height:19.7999992370605px">It seems to be hard to revert now...</span></div></div><div dir="auto"><blockquote type="cite"><div style="line-height:19.7999992370605px">You've committed a lot of small changes in a very short timeframe -</div></blockquote><div><br></div></div><div dir="auto"><div><span style="background-color:rgba(255,255,255,0)">Actually, I committed work over the span of an entire work day.</span></div></div></blockquote><div><br></div><div>Oh, I see.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="auto"><blockquote type="cite"><div><div style="line-height:19.7999992370605px">- I assume you're using git?  Is there a reason why you don't squash your changes before committing?  It makes finding bad commits / reverting harder...</div></div></blockquote><div><br></div></div><div dir="auto"><div>Besides being developer policy to separate changes as much as possible, it also makes changes easier to review, and isolating which change causes a problem easier to determine. </div></div></blockquote><div><br></div><div>Unless it results in complex history and back-in-forth changes, I suppose.</div><div>I've spent more than an hour today trying to locally bisect and revert the changes and ended up just locally reverting 40+ of your commits after 226490 to make progress.  Unfortunately, reverting just r226490 results in a waterfall of merge conflicts.</div><div><br></div><div>Do you think it's reasonable to temporarily revert your changes in the [r226490, HEAD] range to unbreak stuff?</div><div>I have a patch ready for that.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="auto"><div><blockquote type="cite"><div><div class="gmail_quote">On Mon Jan 19 2015 at 10:30:36 PM Duncan P. N. Exon Smith <<a href="mailto:dexonsmith@apple.com" target="_blank" class="cremed">dexonsmith@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: dexonsmith<br>
Date: Mon Jan 19 13:26:24 2015<br>
New Revision: 226490<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=226490&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-<u></u>pr<u></u>oject?rev=226490&view=rev</a><br>
Log:<br>
IR: Remove direct comparisons against Metadata::Storage, NFC<br>
<br>
Modified:<br>
    llvm/trunk/lib/IR/Metadata.cpp<br>
<br>
Modified: llvm/trunk/lib/IR/Metadata.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=226490&r1=226489&r2=226490&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-<u></u>pr<u></u>oject/llvm/trunk/lib/IR/<u></u>Metada<u></u>ta.cpp?rev=226490&r1=<u></u>226489&<u></u>r2=226490&view=diff</a><br>
==============================<u></u><u></u>==============================<u></u><u></u>==================<br>
--- llvm/trunk/lib/IR/Metadata.cpp (original)<br>
+++ llvm/trunk/lib/IR/Metadata.cpp Mon Jan 19 13:26:24 2015<br>
@@ -402,7 +402,7 @@ MDNode::MDNode(LLVMContext &Context, uns<br>
   for (unsigned I = 0, E = MDs.size(); I != E; ++I)<br>
     setOperand(I, MDs[I]);<br>
<br>
-  if (Storage == Temporary)<br>
+  if (isTemporary())<br>
     this->Context.<u></u>makeReplaceable(<br>
         make_unique<<u></u>ReplaceableMetada<u></u>taImpl>(<u></u>Context));<br>
 }<br>
@@ -416,7 +416,7 @@ static bool isOperandUnresolved(Metadata<br>
 UniquableMDNode::<u></u>UniquableMDN<u></u>ode(LLVMContext &C, unsigned ID,<br>
                                  StorageType Storage, ArrayRef<Metadata *> Vals)<br>
     : MDNode(C, ID, Storage, Vals) {<br>
-  if (Storage != Uniqued)<br>
+  if (!isUniqued())<br>
     return;<br>
<br>
   // Check whether any operands are unresolved, requiring re-uniquing.<br>
@@ -432,7 +432,7 @@ UniquableMDNode::<u></u>UniquableMDNo<u></u>de(LLVMCon<br>
 }<br>
<br>
 void UniquableMDNode::resolve() {<br>
-  assert(Storage == Uniqued && "Expected this to be uniqued");<br>
+  assert(isUniqued() && "Expected this to be uniqued");<br>
   assert(!isResolved() && "Expected this to be unresolved");<br>
<br>
   // Move the map, so that this immediately looks resolved.<br>
<br>
<br>
______________________________<u></u><u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/<u></u>mailm<u></u>an/listinfo/llvm-commits</a><br>
</blockquote></div>
</div></blockquote></div></div></blockquote></div></div>