<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 17, 2015 at 4:37 PM, Artem Belevich via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: tra<br>
Date: Tue Nov 17 18:37:41 2015<br>
New Revision: 253410<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253410&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253410&view=rev</a><br>
Log:<br>
Fix for use-after-free which caused test failure in <a href="http://cuda-detect.cu" rel="noreferrer" target="_blank">cuda-detect.cu</a>.<br>
<br>
Return std::string itself instead StringRef to a temporary std::string.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/ToolChains.h<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=253410&r1=253409&r2=253410&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=253410&r1=253409&r2=253410&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains.h Tue Nov 17 18:37:41 2015<br>
@@ -186,7 +186,7 @@ protected:<br>
     /// \brief Get the detected Cuda device library path.<br>
     StringRef getLibDevicePath() const { return CudaLibDevicePath; }<br>
     /// \brief Get libdevice file for given architecture<br>
-    StringRef getLibDeviceFile(StringRef Gpu) const {<br>
+    std::string getLibDeviceFile(StringRef Gpu) const {<br>
       return CudaLibDeviceMap.lookup(Gpu);<br></blockquote><div><br></div><div>You could implement this as:<br><br>auto I = CudaLibDeviceMap.find(Gpu);<br>return I != CudaLibDeviceMap.end() ? I->second : "";<br><br>returning StringRef<br><br>Or, if you know the element will always be in the collection, you could just assert that and "return CudaLibDeviceMap[Gpu]; - and you could return const std::string& there, or StringRef, whichever.<br><br>(both/any of these options would avoid needing to allocate a new string to every caller)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     }<br>
   };<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>