[cfe-commits] r138662 - in /cfe/trunk: include/clang/Driver/Driver.h lib/Driver/Driver.cpp lib/Driver/Tools.cpp
Chad Rosier
mcrosier at apple.com
Fri Aug 26 14:57:47 PDT 2011
On Aug 26, 2011, at 2:52 PM, Benjamin Kramer wrote:
> On Fri, Aug 26, 2011 at 14:28, Chad Rosier <mcrosier at apple.com> wrote:
>> Author: mcrosier
>> Date: Fri Aug 26 16:28:44 2011
>> New Revision: 138662
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=138662&view=rev
>> Log:
>> [driver] When generating temporary files allow a prefix to be added. In many
>> cases we want the prefix to be the original file name less the suffix. For an
>> input such as test.c to named temporary would be something like test-3O4Clq.o
>> Part of <rdar://problem/8314451>
>>
>> Modified:
>> cfe/trunk/include/clang/Driver/Driver.h
>> cfe/trunk/lib/Driver/Driver.cpp
>> cfe/trunk/lib/Driver/Tools.cpp
>>
>> Modified: cfe/trunk/include/clang/Driver/Driver.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Driver.h?rev=138662&r1=138661&r2=138662&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/Driver.h (original)
>> +++ cfe/trunk/include/clang/Driver/Driver.h Fri Aug 26 16:28:44 2011
>> @@ -373,11 +373,11 @@
>> const char *BaseInput,
>> bool AtTopLevel) const;
>>
>> - /// GetTemporaryPath - Return the pathname of a temporary file to
>> - /// use as part of compilation; the file will have the given suffix.
>> + /// GetTemporaryPath - Return the pathname of a temporary file to use
>> + /// as part of compilation; the file will have the given prefix and suffix.
>> ///
>> /// GCC goes to extra lengths here to be a bit more robust.
>> - std::string GetTemporaryPath(const char *Suffix) const;
>> + std::string GetTemporaryPath(const char *Prefix, const char *Suffix) const;
>>
>> /// GetHostInfo - Construct a new host info object for the given
>> /// host triple.
>>
>> Modified: cfe/trunk/lib/Driver/Driver.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=138662&r1=138661&r2=138662&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Driver.cpp (original)
>> +++ cfe/trunk/lib/Driver/Driver.cpp Fri Aug 26 16:28:44 2011
>> @@ -1335,6 +1335,15 @@
>> }
>> }
>>
>> +// Strip the directory and suffix from BaseInput.
>> +static const char *getBaseName (const char *BaseInput) {
>> + std::pair<StringRef, StringRef> Split = StringRef(BaseInput).rsplit('/');
>> + if (Split.second != "")
>> + return Split.second.split('.').first.str().c_str();
>> + else
>> + return Split.first.split('.').first.str().c_str();
>> +}
>
> This is a bug, the temporary from str() is free'd before the function
> returns, so it will return a dangling pointer.
Fixed in r138666.
> Please change this to return a StringRef is possible, which makes
> slicing strings cheap and safer. I also think we already have a
> function that does this somewhere in llvm::sys::path (see
> llvm/include/llvm/Support/PathV2.h)
I'll clean it up to use StringRef shortly or alternatively use llvm::sys::path if possible.
Chad
> - Ben
More information about the cfe-commits
mailing list