[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