<div dir="ltr">Hey! I found that "Missing origin" assertion fires, and am currently reducing a testcase. For now, I've reverted this in r223211 and will let you know as soon as I have a testcase ready.<br><div class="gmail_extra"><br></div><div class="gmail_extra">Nick</div><div class="gmail_extra"><br><div class="gmail_quote">On 1 December 2014 at 01:53, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Mon Dec  1 03:53:51 2014<br>
New Revision: 222997<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=222997&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=222997&view=rev</a><br>
Log:<br>
[msan] Add compile-time checks for missing origins.<br>
<br>
This change makes MemorySanitizer instrumentation a bit more strict<br>
about instructions that have no origin id assigned to them.<br>
<br>
This would have caught the bug that was fixed in r222918.<br>
<br>
No functional change.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp?rev=222997&r1=222996&r2=222997&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp?rev=222997&r1=222996&r2=222997&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp Mon Dec  1 03:53:51 2014<br>
@@ -921,6 +921,8 @@ struct MemorySanitizerVisitor : public I<br>
             Value *OriginPtr =<br>
                 getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset);<br>
             setOrigin(A, EntryIRB.CreateLoad(OriginPtr));<br>
+          } else {<br>
+            setOrigin(A, getCleanOrigin());<br>
           }<br>
         }<br>
         ArgOffset += RoundUpToAlignment(Size, kShadowTLSAlignment);<br>
@@ -940,15 +942,13 @@ struct MemorySanitizerVisitor : public I<br>
   /// \brief Get the origin for a value.<br>
   Value *getOrigin(Value *V) {<br>
     if (!MS.TrackOrigins) return nullptr;<br>
-    if (isa<Instruction>(V) || isa<Argument>(V)) {<br>
-      Value *Origin = OriginMap[V];<br>
-      if (!Origin) {<br>
-        DEBUG(dbgs() << "NO ORIGIN: " << *V << "\n");<br>
-        Origin = getCleanOrigin();<br>
-      }<br>
-      return Origin;<br>
-    }<br>
-    return getCleanOrigin();<br>
+    if (!PropagateShadow) return getCleanOrigin();<br>
+    if (isa<Constant>(V)) return getCleanOrigin();<br>
+    assert((isa<Instruction>(V) || isa<Argument>(V)) &&<br>
+           "Unexpected value type in getOrigin()");<br>
+    Value *Origin = OriginMap[V];<br>
+    assert(Origin && "Missing origin");<br>
+    return Origin;<br>
   }<br>
<br>
   /// \brief Get the origin for i-th argument of the instruction I.<br>
@@ -1088,6 +1088,7 @@ struct MemorySanitizerVisitor : public I<br>
     IRB.CreateStore(getCleanShadow(&I), ShadowPtr);<br>
<br>
     setShadow(&I, getCleanShadow(&I));<br>
+    setOrigin(&I, getCleanOrigin());<br>
   }<br>
<br>
   void visitAtomicRMWInst(AtomicRMWInst &I) {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>