[cfe-commits] r84825 - /cfe/trunk/tools/CIndex/CIndex.cpp

Ted Kremenek kremenek at apple.com
Sun Oct 25 19:23:12 PDT 2009


That's true.  raw_stderr_ostream flushes after every write.

On Oct 25, 2009, at 3:58 PM, Daniel Dunbar wrote:

> Hi Ted,
>
> The flush() calls on llvm::errs() should not be necessary?
>
> - Daniel
>
> On Wed, Oct 21, 2009 at 8:24 PM, Ted Kremenek <kremenek at apple.com>  
> wrote:
>> Author: kremenek
>> Date: Wed Oct 21 22:24:01 2009
>> New Revision: 84825
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=84825&view=rev
>> Log:
>> Add some explanatory diagnostics when  
>> clang_createTranslationUnitFromSource fails.
>>
>> Modified:
>>    cfe/trunk/tools/CIndex/CIndex.cpp
>>
>> Modified: cfe/trunk/tools/CIndex/CIndex.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=84825&r1=84824&r2=84825&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/tools/CIndex/CIndex.cpp (original)
>> +++ cfe/trunk/tools/CIndex/CIndex.cpp Wed Oct 21 22:24:01 2009
>> @@ -27,6 +27,7 @@
>>  #include "llvm/Support/MemoryBuffer.h"
>>  #include "llvm/System/Path.h"
>>  #include "llvm/System/Program.h"
>> +#include "llvm/Support/raw_ostream.h"
>>
>>  #include <cstdio>
>>  #include <vector>
>> @@ -372,11 +373,19 @@
>>   std::string astName(ast_filename);
>>   std::string ErrMsg;
>>
>> -  return ASTUnit::LoadFromPCHFile(astName, &ErrMsg,
>> -                                  CXXIdx->getDisplayDiagnostics() ?
>> -                                    NULL : new  
>> IgnoreDiagnosticsClient(),
>> -                                  CXXIdx->getOnlyLocalDecls(),
>> -                                  /* UseBumpAllocator = */ true);
>> +  CXTranslationUnit TU =
>> +    ASTUnit::LoadFromPCHFile(astName, &ErrMsg,
>> +                           CXXIdx->getDisplayDiagnostics() ?
>> +                           NULL : new IgnoreDiagnosticsClient(),
>> +                           CXXIdx->getOnlyLocalDecls(),
>> +                           /* UseBumpAllocator = */ true);
>> +
>> +  if (CXXIdx->getDisplayDiagnostics() && !ErrMsg.empty()) {
>> +    (llvm::errs() << "clang_createTranslationUnit: " << ErrMsg
>> +                  << '\n').flush();
>> +  }
>> +
>> +  return TU;
>>  }
>>
>>  CXTranslationUnit clang_createTranslationUnitFromSourceFile(
>> @@ -429,10 +438,21 @@
>>
>>  #ifndef LLVM_ON_WIN32
>>   llvm::sys::Path DevNull("/dev/null");
>> +  std::string ErrMsg;
>>   const llvm::sys::Path *Redirects[] = { &DevNull, &DevNull,  
>> &DevNull, NULL };
>> -  llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0], NULL,
>> -                                     !CXXIdx->getDisplayDiagnostics 
>> () ?
>> -                                       &Redirects[0] : NULL);
>> +  llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0], /* env  
>> */ NULL,
>> +      /* redirects */ !CXXIdx->getDisplayDiagnostics() ? &Redirects 
>> [0] : NULL,
>> +      /* secondsToWait */ 0, /* memoryLimits */ 0, &ErrMsg);
>> +
>> +  if (CXXIdx->getDisplayDiagnostics() && !ErrMsg.empty()) {
>> +    llvm::errs() << "clang_createTranslationUnitFromSourceFile: "  
>> << ErrMsg
>> +      << '\n' << "Arguments: \n";
>> +    for (std::vector<const char*>::iterator I = argv.begin(), E =  
>> argv.end();
>> +         I!=E; ++I)
>> +      if (*I) llvm::errs() << ' ' << *I << '\n';
>> +
>> +    (llvm::errs() << '\n').flush();
>> +  }
>>  #else
>>   // FIXME: I don't know what is the equivalent '/dev/null'  
>> redirect for
>>   // Windows for this API.
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>




More information about the cfe-commits mailing list