r229719 - Driver: Fix use of dangling std::string temporary

Benjamin Kramer benny.kra at googlemail.com
Wed Feb 18 10:45:54 PST 2015


Author: d0k
Date: Wed Feb 18 12:45:54 2015
New Revision: 229719

URL: http://llvm.org/viewvc/llvm-project?rev=229719&view=rev
Log:
Driver: Fix use of dangling std::string temporary

What's going on here is that the ternary operator produces a std::string rvalue
that the StringRef points to. I'd hoped bugs like this were a thing of the past
with our asan testing but apparently this code path is only used when LLVM is
configured with a custom --with-c-include-dirs setting.

Unbreaks bootstrapping with GCC5 on Fedora (PR22625), patch by Jonathan Wakely!

Modified:
    cfe/trunk/lib/Driver/ToolChains.cpp

Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=229719&r1=229718&r2=229719&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Feb 18 12:45:54 2015
@@ -3154,7 +3154,8 @@ void Linux::AddClangSystemIncludeArgs(co
     SmallVector<StringRef, 5> dirs;
     CIncludeDirs.split(dirs, ":");
     for (StringRef dir : dirs) {
-      StringRef Prefix = llvm::sys::path::is_absolute(dir) ? SysRoot : "";
+      StringRef Prefix =
+          llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : "";
       addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
     }
     return;





More information about the cfe-commits mailing list