<div dir="ltr"><font face="monospace, monospace">llvm::sys::fs::make_absolute</font> converts its first parameter (<font face="monospace, monospace">const Twine &current_directory</font>) to <font face="monospace, monospace">StringRef p(path.data(), path.size())</font>, and then passes that <font face="monospace, monospace">StringRef</font> to several functions (<font face="monospace, monospace">path::has_root_directory</font>, <font face="monospace, monospace">path::has_root_name</font>, and <font face="monospace, monospace">path::append</font>) that accept <font face="monospace, monospace">Twines</font> as parameters. Since <font face="monospace, monospace">llvm::StringRef</font> can implicitly convert to an <font face="monospace, monospace">llvm::Twine</font>, <font face="monospace, monospace">p</font> converts to a bunch of <font face="monospace, monospace">Twine</font> temporaries.<div><br></div><div>In a few places, namely <font face="monospace, monospace">path::has_root_directory</font> & <font face="monospace, monospace">path::has_root_name</font>, that temporary <font face="monospace, monospace">Twine</font> is again converted to a <font face="monospace, monospace">StringRef</font>:</div><div><br></div><div><div><font face="monospace, monospace">bool has_root_directory(const Twine &path) {</font></div><div><font face="monospace, monospace">  SmallString<128> path_storage;</font></div><div><font face="monospace, monospace">  StringRef p = path.toStringRef(path_storage);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">  return !root_directory(p).empty();</font></div><div><font face="monospace, monospace">}</font></div><div><br></div><div>Is there some reason for this? If not, I'll write a patch to delay the <font face="monospace, monospace">StringRef p(path.data(), path.size())</font> construction until it's actually needed (calls to <font face="monospace, monospace">path::root_name(p)</font> & <font face="monospace, monospace">path::relative_path(p)</font>).</div><div><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span style="font-size:12.8px">Sincerely,</span><br style="font-size:12.8px"><span style="font-size:12.8px">Alexander Riccio</span><br style="font-size:12.8px"><span style="font-size:12.8px">--</span><br style="font-size:12.8px"><span style="font-size:12.8px">"Change the world or go home."</span><div style="font-size:12.8px"><a href="http://about.me/ariccio" target="_blank">about.me/ariccio</a></div><div style="font-size:12.8px"><a href="http://about.me/ariccio" target="_blank"><br></a></div><div style="font-size:12.8px">If left to my own devices, I will build more.</div><div style="font-size:12.8px">⁂</div></div></div></div></div></div>
</div></div></div>