[cfe-commits] r160074 - in /cfe/trunk: include/clang/Basic/FileManager.h include/clang/Basic/SourceManager.h include/clang/Frontend/ASTUnit.h lib/Basic/FileManager.cpp lib/Basic/SourceManager.cpp lib/Frontend/ASTUnit.cpp lib/Serialization/ASTReader.cpp tools/libclang/CIndex.cpp tools/libclang/Indexing.cpp

Axel Naumann Axel.Naumann at cern.ch
Wed Aug 1 00:36:23 PDT 2012


Hi,

Sorry for bringing up such an old revision again, but:

On 07/11/2012 10:59 PM, Argyrios Kyrtzidis wrote:
> Author: akirtzidis
> Date: Wed Jul 11 15:59:04 2012
> New Revision: 160074
>
> URL: http://llvm.org/viewvc/llvm-project?rev=160074&view=rev
> Log:
> Introduce a flag in SourceManager to treat non-system source files
> as "volatile", meaning there's a high enough chance that they may
> change while we are trying to use them.
>
> This flag is only enabled by libclang.
> Currently "volatile" source files will be stat'ed immediately
> before opening them, because the file size stat info
> may not be accurate since when we got it (e.g. from the PCH).
> This avoids crashes when trying to reference mmap'ed memory
> from a file whose size is not what we expect.

What about the cached "doesn't exist here" results? Aren't they an issue 
here, too (they are for us :-) Should we extend this to not cache lookup 
misses of volatile files?

Axel.

> Note that there's still a window for a racing issue to occur
> but the window for it should be way smaller than before.
> We can consider later on to avoid mmap completely on such files.
>
> rdar://11612916
>
> Modified:
>      cfe/trunk/include/clang/Basic/FileManager.h
>      cfe/trunk/include/clang/Basic/SourceManager.h
>      cfe/trunk/include/clang/Frontend/ASTUnit.h
>      cfe/trunk/lib/Basic/FileManager.cpp
>      cfe/trunk/lib/Basic/SourceManager.cpp
>      cfe/trunk/lib/Frontend/ASTUnit.cpp
>      cfe/trunk/lib/Serialization/ASTReader.cpp
>      cfe/trunk/tools/libclang/CIndex.cpp
>      cfe/trunk/tools/libclang/Indexing.cpp
>
> Modified: cfe/trunk/include/clang/Basic/FileManager.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/FileManager.h?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/FileManager.h (original)
> +++ cfe/trunk/include/clang/Basic/FileManager.h Wed Jul 11 15:59:04 2012
> @@ -221,7 +221,8 @@
>     /// \brief Open the specified file as a MemoryBuffer, returning a new
>     /// MemoryBuffer if successful, otherwise returning null.
>     llvm::MemoryBuffer *getBufferForFile(const FileEntry *Entry,
> -                                       std::string *ErrorStr = 0);
> +                                       std::string *ErrorStr = 0,
> +                                       bool isVolatile = false);
>     llvm::MemoryBuffer *getBufferForFile(StringRef Filename,
>                                          std::string *ErrorStr = 0);
>
>
> Modified: cfe/trunk/include/clang/Basic/SourceManager.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/SourceManager.h?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/SourceManager.h (original)
> +++ cfe/trunk/include/clang/Basic/SourceManager.h Wed Jul 11 15:59:04 2012
> @@ -128,14 +128,20 @@
>       /// When true, the original entry may be a virtual file that does not
>       /// exist.
>       unsigned BufferOverridden : 1;
> +
> +    /// \brief True if this content cache was initially created for a source
> +    /// file considered as a system one.
> +    unsigned IsSystemFile : 1;
>
>       ContentCache(const FileEntry *Ent = 0)
>         : Buffer(0, false), OrigEntry(Ent), ContentsEntry(Ent),
> -        SourceLineCache(0), NumLines(0), BufferOverridden(false) {}
> +        SourceLineCache(0), NumLines(0), BufferOverridden(false),
> +        IsSystemFile(false) {}
>
>       ContentCache(const FileEntry *Ent, const FileEntry *contentEnt)
>         : Buffer(0, false), OrigEntry(Ent), ContentsEntry(contentEnt),
> -        SourceLineCache(0), NumLines(0), BufferOverridden(false) {}
> +        SourceLineCache(0), NumLines(0), BufferOverridden(false),
> +        IsSystemFile(false) {}
>
>       ~ContentCache();
>
> @@ -143,7 +149,8 @@
>       /// a non-NULL Buffer or SourceLineCache.  Ownership of allocated memory
>       /// is not transferred, so this is a logical error.
>       ContentCache(const ContentCache &RHS)
> -      : Buffer(0, false), SourceLineCache(0), BufferOverridden(false)
> +      : Buffer(0, false), SourceLineCache(0), BufferOverridden(false),
> +        IsSystemFile(false)
>       {
>         OrigEntry = RHS.OrigEntry;
>         ContentsEntry = RHS.ContentsEntry;
> @@ -534,6 +541,10 @@
>     /// files, should report the original file name. Defaults to true.
>     bool OverridenFilesKeepOriginalName;
>
> +  /// \brief True if non-system source files should be treated as volatile
> +  /// (likely to change while trying to use them). Defaults to false.
> +  bool UserFilesAreVolatile;
> +
>     struct OverriddenFilesInfoTy {
>       /// \brief Files that have been overriden with the contents from another
>       /// file.
> @@ -639,7 +650,8 @@
>     explicit SourceManager(const SourceManager&);
>     void operator=(const SourceManager&);
>   public:
> -  SourceManager(DiagnosticsEngine &Diag, FileManager &FileMgr);
> +  SourceManager(DiagnosticsEngine &Diag, FileManager &FileMgr,
> +                bool UserFilesAreVolatile = false);
>     ~SourceManager();
>
>     void clearIDTables();
> @@ -654,6 +666,10 @@
>       OverridenFilesKeepOriginalName = value;
>     }
>
> +  /// \brief True if non-system source files should be treated as volatile
> +  /// (likely to change while trying to use them).
> +  bool userFilesAreVolatile() const { return UserFilesAreVolatile; }
> +
>     /// \brief Create the FileID for a memory buffer that will represent the
>     /// FileID for the main source.
>     ///
> @@ -706,7 +722,9 @@
>     FileID createFileID(const FileEntry *SourceFile, SourceLocation IncludePos,
>                         SrcMgr::CharacteristicKind FileCharacter,
>                         int LoadedID = 0, unsigned LoadedOffset = 0) {
> -    const SrcMgr::ContentCache *IR = getOrCreateContentCache(SourceFile);
> +    const SrcMgr::ContentCache *
> +      IR = getOrCreateContentCache(SourceFile,
> +                              /*isSystemFile=*/FileCharacter != SrcMgr::C_User);
>       assert(IR && "getOrCreateContentCache() cannot return NULL");
>       return createFileID(IR, IncludePos, FileCharacter, LoadedID, LoadedOffset);
>     }
> @@ -1519,7 +1537,8 @@
>                         int LoadedID, unsigned LoadedOffset);
>
>     const SrcMgr::ContentCache *
> -    getOrCreateContentCache(const FileEntry *SourceFile);
> +    getOrCreateContentCache(const FileEntry *SourceFile,
> +                            bool isSystemFile = false);
>
>     /// \brief Create a new ContentCache for the specified  memory buffer.
>     const SrcMgr::ContentCache*
>
> Modified: cfe/trunk/include/clang/Frontend/ASTUnit.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/ASTUnit.h (original)
> +++ cfe/trunk/include/clang/Frontend/ASTUnit.h Wed Jul 11 15:59:04 2012
> @@ -254,6 +254,10 @@
>     /// \brief Whether to include brief documentation within the set of code
>     /// completions cached.
>     bool IncludeBriefCommentsInCodeCompletion : 1;
> +
> +  /// \brief True if non-system source files should be treated as volatile
> +  /// (likely to change while trying to use them).
> +  bool UserFilesAreVolatile : 1;
>
>     /// \brief The language options used when we load an AST file.
>     LangOptions ASTFileLangOpts;
> @@ -619,7 +623,8 @@
>     /// \brief Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
>     static ASTUnit *create(CompilerInvocation *CI,
>                            IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
> -                         bool CaptureDiagnostics = false);
> +                         bool CaptureDiagnostics,
> +                         bool UserFilesAreVolatile);
>
>     /// \brief Create a ASTUnit from an AST file.
>     ///
> @@ -636,7 +641,8 @@
>                                     RemappedFile *RemappedFiles = 0,
>                                     unsigned NumRemappedFiles = 0,
>                                     bool CaptureDiagnostics = false,
> -                                  bool AllowPCHWithCompilerErrors = false);
> +                                  bool AllowPCHWithCompilerErrors = false,
> +                                  bool UserFilesAreVolatile = false);
>
>   private:
>     /// \brief Helper function for \c LoadFromCompilerInvocation() and
> @@ -687,6 +693,7 @@
>                                                bool PrecompilePreamble = false,
>                                          bool CacheCodeCompletionResults = false,
>                                 bool IncludeBriefCommentsInCodeCompletion = false,
> +                                       bool UserFilesAreVolatile = false,
>                                          OwningPtr<ASTUnit> *ErrAST = 0);
>
>     /// LoadFromCompilerInvocation - Create an ASTUnit from a source file, via a
> @@ -707,7 +714,8 @@
>                                                bool PrecompilePreamble = false,
>                                         TranslationUnitKind TUKind = TU_Complete,
>                                          bool CacheCodeCompletionResults = false,
> -                            bool IncludeBriefCommentsInCodeCompletion = false);
> +                            bool IncludeBriefCommentsInCodeCompletion = false,
> +                                             bool UserFilesAreVolatile = false);
>
>     /// LoadFromCommandLine - Create an ASTUnit from a vector of command line
>     /// arguments, which must specify exactly one source file.
> @@ -742,6 +750,7 @@
>                               bool IncludeBriefCommentsInCodeCompletion = false,
>                                         bool AllowPCHWithCompilerErrors = false,
>                                         bool SkipFunctionBodies = false,
> +                                      bool UserFilesAreVolatile = false,
>                                         OwningPtr<ASTUnit> *ErrAST = 0);
>
>     /// \brief Reparse the source files using the same command-line options that
>
> Modified: cfe/trunk/lib/Basic/FileManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/FileManager.cpp (original)
> +++ cfe/trunk/lib/Basic/FileManager.cpp Wed Jul 11 15:59:04 2012
> @@ -488,15 +488,21 @@
>   }
>
>   llvm::MemoryBuffer *FileManager::
> -getBufferForFile(const FileEntry *Entry, std::string *ErrorStr) {
> +getBufferForFile(const FileEntry *Entry, std::string *ErrorStr,
> +                 bool isVolatile) {
>     OwningPtr<llvm::MemoryBuffer> Result;
>     llvm::error_code ec;
>
> +  uint64_t FileSize = Entry->getSize();
> +  // If there's a high enough chance that the file have changed since we
> +  // got its size, force a stat before opening it.
> +  if (isVolatile)
> +    FileSize = -1;
> +
>     const char *Filename = Entry->getName();
>     // If the file is already open, use the open file descriptor.
>     if (Entry->FD != -1) {
> -    ec = llvm::MemoryBuffer::getOpenFile(Entry->FD, Filename, Result,
> -                                         Entry->getSize());
> +    ec = llvm::MemoryBuffer::getOpenFile(Entry->FD, Filename, Result, FileSize);
>       if (ErrorStr)
>         *ErrorStr = ec.message();
>
> @@ -508,7 +514,7 @@
>     // Otherwise, open the file.
>
>     if (FileSystemOpts.WorkingDir.empty()) {
> -    ec = llvm::MemoryBuffer::getFile(Filename, Result, Entry->getSize());
> +    ec = llvm::MemoryBuffer::getFile(Filename, Result, FileSize);
>       if (ec && ErrorStr)
>         *ErrorStr = ec.message();
>       return Result.take();
> @@ -516,7 +522,7 @@
>
>     SmallString<128> FilePath(Entry->getName());
>     FixupRelativePath(FilePath);
> -  ec = llvm::MemoryBuffer::getFile(FilePath.str(), Result, Entry->getSize());
> +  ec = llvm::MemoryBuffer::getFile(FilePath.str(), Result, FileSize);
>     if (ec && ErrorStr)
>       *ErrorStr = ec.message();
>     return Result.take();
>
> Modified: cfe/trunk/lib/Basic/SourceManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceManager.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Basic/SourceManager.cpp (original)
> +++ cfe/trunk/lib/Basic/SourceManager.cpp Wed Jul 11 15:59:04 2012
> @@ -97,7 +97,10 @@
>     }
>
>     std::string ErrorStr;
> -  Buffer.setPointer(SM.getFileManager().getBufferForFile(ContentsEntry, &ErrorStr));
> +  bool isVolatile = SM.userFilesAreVolatile() && !IsSystemFile;
> +  Buffer.setPointer(SM.getFileManager().getBufferForFile(ContentsEntry,
> +                                                         &ErrorStr,
> +                                                         isVolatile));
>
>     // If we were unable to open the file, then we are in an inconsistent
>     // situation where the content cache referenced a file which no longer
> @@ -367,8 +370,10 @@
>   // Private 'Create' methods.
>   //===----------------------------------------------------------------------===//
>
> -SourceManager::SourceManager(DiagnosticsEngine &Diag, FileManager &FileMgr)
> +SourceManager::SourceManager(DiagnosticsEngine &Diag, FileManager &FileMgr,
> +                             bool UserFilesAreVolatile)
>     : Diag(Diag), FileMgr(FileMgr), OverridenFilesKeepOriginalName(true),
> +    UserFilesAreVolatile(UserFilesAreVolatile),
>       ExternalSLocEntries(0), LineTable(0), NumLinearScans(0),
>       NumBinaryProbes(0), FakeBufferForRecovery(0),
>       FakeContentCacheForRecovery(0) {
> @@ -426,7 +431,8 @@
>   /// getOrCreateContentCache - Create or return a cached ContentCache for the
>   /// specified file.
>   const ContentCache *
> -SourceManager::getOrCreateContentCache(const FileEntry *FileEnt) {
> +SourceManager::getOrCreateContentCache(const FileEntry *FileEnt,
> +                                       bool isSystemFile) {
>     assert(FileEnt && "Didn't specify a file entry to use?");
>
>     // Do we already have information about this file?
> @@ -455,6 +461,8 @@
>       new (Entry) ContentCache(FileEnt);
>     }
>
> +  Entry->IsSystemFile = isSystemFile;
> +
>     return Entry;
>   }
>
>
> Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
> +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Wed Jul 11 15:59:04 2012
> @@ -215,7 +215,7 @@
>       PreambleRebuildCounter(0), SavedMainFileBuffer(0), PreambleBuffer(0),
>       NumWarningsInPreamble(0),
>       ShouldCacheCodeCompletionResults(false),
> -    IncludeBriefCommentsInCodeCompletion(false),
> +    IncludeBriefCommentsInCodeCompletion(false), UserFilesAreVolatile(false),
>       CompletionCacheTopLevelHashValue(0),
>       PreambleTopLevelHashValue(0),
>       CurrentTopLevelHashValue(0),
> @@ -658,7 +658,8 @@
>                                     RemappedFile *RemappedFiles,
>                                     unsigned NumRemappedFiles,
>                                     bool CaptureDiagnostics,
> -                                  bool AllowPCHWithCompilerErrors) {
> +                                  bool AllowPCHWithCompilerErrors,
> +                                  bool UserFilesAreVolatile) {
>     OwningPtr<ASTUnit> AST(new ASTUnit(true));
>
>     // Recover resources if we crash before exiting this method.
> @@ -674,8 +675,10 @@
>     AST->CaptureDiagnostics = CaptureDiagnostics;
>     AST->Diagnostics = Diags;
>     AST->FileMgr = new FileManager(FileSystemOpts);
> +  AST->UserFilesAreVolatile = UserFilesAreVolatile;
>     AST->SourceMgr = new SourceManager(AST->getDiagnostics(),
> -                                     AST->getFileManager());
> +                                     AST->getFileManager(),
> +                                     UserFilesAreVolatile);
>     AST->HeaderInfo.reset(new HeaderSearch(AST->getFileManager(),
>                                            AST->getDiagnostics(),
>                                            AST->ASTFileLangOpts,
> @@ -1077,7 +1080,8 @@
>     LangOpts = &Clang->getLangOpts();
>     FileSystemOpts = Clang->getFileSystemOpts();
>     FileMgr = new FileManager(FileSystemOpts);
> -  SourceMgr = new SourceManager(getDiagnostics(), *FileMgr);
> +  SourceMgr = new SourceManager(getDiagnostics(), *FileMgr,
> +                                UserFilesAreVolatile);
>     TheSema.reset();
>     Ctx = 0;
>     PP = 0;
> @@ -1665,7 +1669,8 @@
>
>   ASTUnit *ASTUnit::create(CompilerInvocation *CI,
>                            IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
> -                         bool CaptureDiagnostics) {
> +                         bool CaptureDiagnostics,
> +                         bool UserFilesAreVolatile) {
>     OwningPtr<ASTUnit> AST;
>     AST.reset(new ASTUnit(false));
>     ConfigureDiags(Diags, 0, 0, *AST, CaptureDiagnostics);
> @@ -1673,7 +1678,9 @@
>     AST->Invocation = CI;
>     AST->FileSystemOpts = CI->getFileSystemOpts();
>     AST->FileMgr = new FileManager(AST->FileSystemOpts);
> -  AST->SourceMgr = new SourceManager(AST->getDiagnostics(), *AST->FileMgr);
> +  AST->UserFilesAreVolatile = UserFilesAreVolatile;
> +  AST->SourceMgr = new SourceManager(AST->getDiagnostics(), *AST->FileMgr,
> +                                     UserFilesAreVolatile);
>
>     return AST.take();
>   }
> @@ -1689,6 +1696,7 @@
>                                                bool PrecompilePreamble,
>                                                bool CacheCodeCompletionResults,
>                                       bool IncludeBriefCommentsInCodeCompletion,
> +                                             bool UserFilesAreVolatile,
>                                                OwningPtr<ASTUnit> *ErrAST) {
>     assert(CI && "A CompilerInvocation is required");
>
> @@ -1696,7 +1704,7 @@
>     ASTUnit *AST = Unit;
>     if (!AST) {
>       // Create the AST unit.
> -    OwnAST.reset(create(CI, Diags, CaptureDiagnostics));
> +    OwnAST.reset(create(CI, Diags, CaptureDiagnostics, UserFilesAreVolatile));
>       AST = OwnAST.get();
>     }
>
> @@ -1859,7 +1867,8 @@
>                                                bool PrecompilePreamble,
>                                                TranslationUnitKind TUKind,
>                                                bool CacheCodeCompletionResults,
> -                                    bool IncludeBriefCommentsInCodeCompletion) {
> +                                    bool IncludeBriefCommentsInCodeCompletion,
> +                                             bool UserFilesAreVolatile) {
>     // Create the AST unit.
>     OwningPtr<ASTUnit> AST;
>     AST.reset(new ASTUnit(false));
> @@ -1872,6 +1881,7 @@
>     AST->IncludeBriefCommentsInCodeCompletion
>       = IncludeBriefCommentsInCodeCompletion;
>     AST->Invocation = CI;
> +  AST->UserFilesAreVolatile = UserFilesAreVolatile;
>
>     // Recover resources if we crash before exiting this method.
>     llvm::CrashRecoveryContextCleanupRegistrar<ASTUnit>
> @@ -1898,6 +1908,7 @@
>                                         bool IncludeBriefCommentsInCodeCompletion,
>                                         bool AllowPCHWithCompilerErrors,
>                                         bool SkipFunctionBodies,
> +                                      bool UserFilesAreVolatile,
>                                         OwningPtr<ASTUnit> *ErrAST) {
>     if (!Diags.getPtr()) {
>       // No diagnostics engine was provided, so create our own diagnostics object
> @@ -1957,6 +1968,7 @@
>     AST->ShouldCacheCodeCompletionResults = CacheCodeCompletionResults;
>     AST->IncludeBriefCommentsInCodeCompletion
>       = IncludeBriefCommentsInCodeCompletion;
> +  AST->UserFilesAreVolatile = UserFilesAreVolatile;
>     AST->NumStoredDiagnosticsFromDriver = StoredDiagnostics.size();
>     AST->StoredDiagnostics.swap(StoredDiagnostics);
>     AST->Invocation = CI;
>
> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Wed Jul 11 15:59:04 2012
> @@ -1127,8 +1127,9 @@
>         // This is the module's main file.
>         IncludeLoc = getImportLocation(F);
>       }
> -    FileID FID = SourceMgr.createFileID(File, IncludeLoc,
> -                                        (SrcMgr::CharacteristicKind)Record[2],
> +    SrcMgr::CharacteristicKind
> +      FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
> +    FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
>                                           ID, BaseOffset + Record[0]);
>       SrcMgr::FileInfo &FileInfo =
>             const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
> @@ -1145,7 +1146,8 @@
>       }
>
>       const SrcMgr::ContentCache *ContentCache
> -      = SourceMgr.getOrCreateContentCache(File);
> +      = SourceMgr.getOrCreateContentCache(File,
> +                              /*isSystemFile=*/FileCharacter != SrcMgr::C_User);
>       if (OverriddenBuffer && !ContentCache->BufferOverridden &&
>           ContentCache->ContentsEntry == ContentCache->OrigEntry) {
>         unsigned Code = SLocEntryCursor.ReadCode();
>
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Wed Jul 11 15:59:04 2012
> @@ -2464,7 +2464,8 @@
>                                     CXXIdx->getOnlyLocalDecls(),
>                                     0, 0,
>                                     /*CaptureDiagnostics=*/true,
> -                                  /*AllowPCHWithCompilerErrors=*/true);
> +                                  /*AllowPCHWithCompilerErrors=*/true,
> +                                  /*UserFilesAreVolatile=*/true);
>     return MakeCXTranslationUnit(CXXIdx, TU);
>   }
>
> @@ -2612,6 +2613,7 @@
>                                    IncludeBriefCommentsInCodeCompletion,
>                                    /*AllowPCHWithCompilerErrors=*/true,
>                                    SkipFunctionBodies,
> +                                 /*UserFilesAreVolatile=*/true,
>                                    &ErrUnit));
>
>     if (NumErrors != Diags->getClient()->getNumErrors()) {
>
> Modified: cfe/trunk/tools/libclang/Indexing.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=160074&r1=160073&r2=160074&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/Indexing.cpp (original)
> +++ cfe/trunk/tools/libclang/Indexing.cpp Wed Jul 11 15:59:04 2012
> @@ -353,7 +353,8 @@
>       CInvok->getDiagnosticOpts().IgnoreWarnings = true;
>
>     ASTUnit *Unit = ASTUnit::create(CInvok.getPtr(), Diags,
> -                                  /*CaptureDiagnostics=*/true);
> +                                  /*CaptureDiagnostics=*/true,
> +                                  /*UserFilesAreVolatile=*/true);
>     OwningPtr<CXTUOwner> CXTU(new CXTUOwner(MakeCXTranslationUnit(CXXIdx, Unit)));
>
>     // Recover resources if we crash before exiting this method.
> @@ -396,7 +397,9 @@
>                                                          OnlyLocalDecls,
>                                                       /*CaptureDiagnostics=*/true,
>                                                          PrecompilePreamble,
> -                                                    CacheCodeCompletionResults);
> +                                                    CacheCodeCompletionResults,
> +                                 /*IncludeBriefCommentsInCodeCompletion=*/false,
> +                                                 /*UserFilesAreVolatile=*/true);
>     if (DiagTrap.hasErrorOccurred() && CXXIdx->getDisplayDiagnostics())
>       printDiagsToStderr(Unit);
>
>
>
> _______________________________________________
> 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