FYI: c-index-test.c:1284: warning: string length '570' is greater than the length '509' ISO C89 compilers are required to support
Which, it seems, Clang doesn't warn about. :) - Daniel On Mon, Jul 19, 2010 at 2:46 PM, Douglas Gregor <[email protected]> wrote: > Author: dgregor > Date: Mon Jul 19 16:46:24 2010 > New Revision: 108756 > > URL: http://llvm.org/viewvc/llvm-project?rev=108756&view=rev > Log: > Introduce a new libclang API, clang_reparseTranslationUnit(), which > reparses an already-parsed translation unit. At the moment it's just a > convenience function, but we hope to use it for performance > optimizations. > > Modified: > cfe/trunk/include/clang-c/Index.h > cfe/trunk/include/clang/Basic/Diagnostic.h > cfe/trunk/include/clang/Frontend/ASTUnit.h > cfe/trunk/include/clang/Frontend/PreprocessorOptions.h > cfe/trunk/lib/Basic/Diagnostic.cpp > cfe/trunk/lib/Frontend/ASTUnit.cpp > cfe/trunk/test/Index/cindex-from-source.m > cfe/trunk/tools/c-index-test/c-index-test.c > cfe/trunk/tools/libclang/CIndex.cpp > cfe/trunk/tools/libclang/libclang.darwin.exports > cfe/trunk/tools/libclang/libclang.exports > > Modified: cfe/trunk/include/clang-c/Index.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/include/clang-c/Index.h (original) > +++ cfe/trunk/include/clang-c/Index.h Mon Jul 19 16:46:24 2010 > @@ -640,6 +640,44 @@ > CINDEX_LINKAGE void clang_disposeTranslationUnit(CXTranslationUnit); > > /** > + * \brief Reparse the source files that produced this translation unit. > + * > + * This routine can be used to re-parse the source files that originally > + * created the given translation unit, for example because those source files > + * have changed (either on disk or as passed via \p unsaved_files). The > + * source code will be reparsed with the same command-line options as it > + * was originally parsed. > + * > + * Reparsing a translation unit invalidates all cursors and source locations > + * that refer into that translation unit. This makes reparsing a translation > + * unit semantically equivalent to destroying the translation unit and then > + * creating a new translation unit with the same command-line arguments. > + * However, it may be more efficient to reparse a translation > + * unit using this routine. > + * > + * \param TU The translation unit whose contents will be re-parsed. The > + * translation unit must originally have been built with > + * \c clang_createTranslationUnitFromSourceFile(). > + * > + * \param num_unsaved_files The number of unsaved file entries in \p > + * unsaved_files. > + * > + * \param unsaved_files The files that have not yet been saved to disk > + * but may be required for parsing, including the contents of > + * those files. The contents and name of these files (as specified by > + * CXUnsavedFile) are copied when necessary, so the client only needs to > + * guarantee their validity until the call to this function returns. > + * > + * \returns 0 if the sources could be reparsed. A non-zero value will be > + * returned if reparsing was impossible, such that the translation unit is > + * invalid. In such cases, the only valid call for \p TU is > + * \c clang_disposeTranslationUnit(TU). > + */ > +CINDEX_LINKAGE int clang_reparseTranslationUnit(CXTranslationUnit TU, > + unsigned num_unsaved_files, > + struct CXUnsavedFile > *unsaved_files); > + > +/** > * @} > */ > > > Modified: cfe/trunk/include/clang/Basic/Diagnostic.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diagnostic.h?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/Diagnostic.h (original) > +++ cfe/trunk/include/clang/Basic/Diagnostic.h Mon Jul 19 16:46:24 2010 > @@ -404,6 +404,10 @@ > ArgToStringCookie = Cookie; > } > > + /// \brief Reset the state of the diagnostic object to its initial > + /// configuration. > + void Reset(); > + > > //===--------------------------------------------------------------------===// > // Diagnostic classification and reporting interfaces. > // > > Modified: cfe/trunk/include/clang/Frontend/ASTUnit.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Frontend/ASTUnit.h (original) > +++ cfe/trunk/include/clang/Frontend/ASTUnit.h Mon Jul 19 16:46:24 2010 > @@ -70,6 +70,9 @@ > // FIXME: This is temporary; eventually, CIndex will always do this. > bool OnlyLocalDecls; > > + /// \brief Whether to capture any diagnostics produced. > + bool CaptureDiagnostics; > + > /// Track whether the main file was loaded from an AST or not. > bool MainFileIsAST; > > @@ -120,6 +123,9 @@ > > explicit ASTUnit(bool MainFileIsAST); > > + void CleanTemporaryFiles(); > + bool Parse(); > + > public: > class ConcurrencyCheck { > volatile ASTUnit &Self; > @@ -259,6 +265,14 @@ > RemappedFile *RemappedFiles = 0, > unsigned NumRemappedFiles = 0, > bool CaptureDiagnostics = false); > + > + /// \brief Reparse the source files using the same command-line options > that > + /// were originally used to produce this translation unit. > + /// > + /// \returns True if a failure occurred that causes the ASTUnit not to > + /// contain any translation-unit information, false otherwise. > + bool Reparse(RemappedFile *RemappedFiles = 0, > + unsigned NumRemappedFiles = 0); > }; > > } // namespace clang > > Modified: cfe/trunk/include/clang/Frontend/PreprocessorOptions.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PreprocessorOptions.h?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Frontend/PreprocessorOptions.h (original) > +++ cfe/trunk/include/clang/Frontend/PreprocessorOptions.h Mon Jul 19 > 16:46:24 2010 > @@ -95,6 +95,10 @@ > void addRemappedFile(llvm::StringRef From, const llvm::MemoryBuffer * To) { > RemappedFileBuffers.push_back(std::make_pair(From, To)); > } > + void clearRemappedFiles() { > + RemappedFiles.clear(); > + RemappedFileBuffers.clear(); > + } > }; > > } // end namespace clang > > Modified: cfe/trunk/lib/Basic/Diagnostic.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Diagnostic.cpp?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/lib/Basic/Diagnostic.cpp (original) > +++ cfe/trunk/lib/Basic/Diagnostic.cpp Mon Jul 19 16:46:24 2010 > @@ -244,35 +244,10 @@ > > > Diagnostic::Diagnostic(DiagnosticClient *client) : Client(client) { > - AllExtensionsSilenced = 0; > - IgnoreAllWarnings = false; > - WarningsAsErrors = false; > - ErrorsAsFatal = false; > - SuppressSystemWarnings = false; > - SuppressAllDiagnostics = false; > - ShowOverloads = Ovl_All; > - ExtBehavior = Ext_Ignore; > - > - ErrorOccurred = false; > - FatalErrorOccurred = false; > - ErrorLimit = 0; > - TemplateBacktraceLimit = 0; > - > - NumWarnings = 0; > - NumErrors = 0; > - NumErrorsSuppressed = 0; > - CustomDiagInfo = 0; > - CurDiagID = ~0U; > - LastDiagLevel = Ignored; > - > ArgToStringFn = DummyArgToStringFn; > ArgToStringCookie = 0; > > - DelayedDiagID = 0; > - > - // Set all mappings to 'unset'. > - DiagMappings BlankDiags(diag::DIAG_UPPER_LIMIT/2, 0); > - DiagMappingsStack.push_back(BlankDiags); > + Reset(); > } > > Diagnostic::~Diagnostic() { > @@ -335,6 +310,36 @@ > return true; > } > > +void Diagnostic::Reset() { > + AllExtensionsSilenced = 0; > + IgnoreAllWarnings = false; > + WarningsAsErrors = false; > + ErrorsAsFatal = false; > + SuppressSystemWarnings = false; > + SuppressAllDiagnostics = false; > + ShowOverloads = Ovl_All; > + ExtBehavior = Ext_Ignore; > + > + ErrorOccurred = false; > + FatalErrorOccurred = false; > + ErrorLimit = 0; > + TemplateBacktraceLimit = 0; > + > + NumWarnings = 0; > + NumErrors = 0; > + NumErrorsSuppressed = 0; > + CustomDiagInfo = 0; > + CurDiagID = ~0U; > + LastDiagLevel = Ignored; > + DelayedDiagID = 0; > + > + // Set all mappings to 'unset'. > + while (!DiagMappingsStack.empty()) > + DiagMappingsStack.pop_back(); > + > + DiagMappings BlankDiags(diag::DIAG_UPPER_LIMIT/2, 0); > + DiagMappingsStack.push_back(BlankDiags); > +} > > /// getDescription - Given a diagnostic ID, return a description of the > /// issue. > > Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original) > +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Mon Jul 19 16:46:24 2010 > @@ -36,12 +36,18 @@ > using namespace clang; > > ASTUnit::ASTUnit(bool _MainFileIsAST) > - : MainFileIsAST(_MainFileIsAST), ConcurrencyCheckValue(CheckUnlocked) { } > + : CaptureDiagnostics(false), MainFileIsAST(_MainFileIsAST), > + ConcurrencyCheckValue(CheckUnlocked) { } > > ASTUnit::~ASTUnit() { > ConcurrencyCheckValue = CheckLocked; > + CleanTemporaryFiles(); > +} > + > +void ASTUnit::CleanTemporaryFiles() { > for (unsigned I = 0, N = TemporaryFiles.size(); I != N; ++I) > TemporaryFiles[I].eraseFromDisk(); > + TemporaryFiles.clear(); > } > > namespace { > @@ -156,7 +162,8 @@ > DiagnosticOptions DiagOpts; > Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0); > } > - > + > + AST->CaptureDiagnostics = CaptureDiagnostics; > AST->OnlyLocalDecls = OnlyLocalDecls; > AST->Diagnostics = Diags; > AST->FileMgr.reset(new FileManager); > @@ -298,41 +305,38 @@ > > } > > -ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI, > - llvm::IntrusiveRefCntPtr<Diagnostic> > Diags, > - bool OnlyLocalDecls, > - bool CaptureDiagnostics) { > +/// Parse the source file into a translation unit using the given compiler > +/// invocation, replacing the current translation unit. > +/// > +/// \returns True if a failure occurred that causes the ASTUnit not to > +/// contain any translation-unit information, false otherwise. > +bool ASTUnit::Parse() { > + if (!Invocation.get()) > + return true; > + > // Create the compiler instance to use for building the AST. > CompilerInstance Clang; > - llvm::OwningPtr<ASTUnit> AST; > - llvm::OwningPtr<TopLevelDeclTrackerAction> Act; > - > - if (!Diags.getPtr()) { > - // No diagnostics engine was provided, so create our own diagnostics > object > - // with the default options. > - DiagnosticOptions DiagOpts; > - Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0); > - } > + Clang.setInvocation(Invocation.take()); > + OriginalSourceFile = Clang.getFrontendOpts().Inputs[0].second; > + > + // Set up diagnostics. > + Clang.setDiagnostics(&getDiagnostics()); > + Clang.setDiagnosticClient(getDiagnostics().getClient()); > > - Clang.setInvocation(CI); > - > - Clang.setDiagnostics(Diags.getPtr()); > - Clang.setDiagnosticClient(Diags->getClient()); > - > // Create the target instance. > Clang.setTarget(TargetInfo::CreateTargetInfo(Clang.getDiagnostics(), > Clang.getTargetOpts())); > if (!Clang.hasTarget()) { > Clang.takeDiagnosticClient(); > - return 0; > + return true; > } > - > + > // Inform the target of the language options. > // > // FIXME: We shouldn't need to do this, the target should be immutable once > // created. This complexity should be lifted elsewhere. > Clang.getTarget().setForcedLangOptions(Clang.getLangOpts()); > - > + > assert(Clang.getFrontendOpts().Inputs.size() == 1 && > "Invocation must have exactly one source file!"); > assert(Clang.getFrontendOpts().Inputs[0].first != IK_AST && > @@ -340,52 +344,84 @@ > assert(Clang.getFrontendOpts().Inputs[0].first != IK_LLVM_IR && > "IR inputs not support here!"); > > - // Create the AST unit. > - AST.reset(new ASTUnit(false)); > - AST->Diagnostics = Diags; > - AST->FileMgr.reset(new FileManager); > - AST->SourceMgr.reset(new SourceManager(AST->getDiagnostics())); > - AST->OnlyLocalDecls = OnlyLocalDecls; > - AST->OriginalSourceFile = Clang.getFrontendOpts().Inputs[0].second; > - > + // Configure the various subsystems. > + // FIXME: Should we retain the previous file manager? > + FileMgr.reset(new FileManager); > + SourceMgr.reset(new SourceManager(getDiagnostics())); > + Ctx.reset(); > + PP.reset(); > + > + // Clear out old caches and data. > + TopLevelDecls.clear(); > + StoredDiagnostics.clear(); > + CleanTemporaryFiles(); > + PreprocessedEntitiesByFile.clear(); > + > // Capture any diagnostics that would otherwise be dropped. > CaptureDroppedDiagnostics Capture(CaptureDiagnostics, > Clang.getDiagnostics(), > - AST->StoredDiagnostics); > - > + StoredDiagnostics); > + > // Create a file manager object to provide access to and cache the > filesystem. > - Clang.setFileManager(&AST->getFileManager()); > - > + Clang.setFileManager(&getFileManager()); > + > // Create the source manager. > - Clang.setSourceManager(&AST->getSourceManager()); > - > - Act.reset(new TopLevelDeclTrackerAction(*AST)); > + Clang.setSourceManager(&getSourceManager()); > + > + llvm::OwningPtr<TopLevelDeclTrackerAction> Act; > + Act.reset(new TopLevelDeclTrackerAction(*this)); > if (!Act->BeginSourceFile(Clang, Clang.getFrontendOpts().Inputs[0].second, > Clang.getFrontendOpts().Inputs[0].first)) > goto error; > - > + > Act->Execute(); > - > + > // Steal the created target, context, and preprocessor, and take back the > // source and file managers. > - AST->Ctx.reset(Clang.takeASTContext()); > - AST->PP.reset(Clang.takePreprocessor()); > + Ctx.reset(Clang.takeASTContext()); > + PP.reset(Clang.takePreprocessor()); > Clang.takeSourceManager(); > Clang.takeFileManager(); > - AST->Target.reset(Clang.takeTarget()); > - > + Target.reset(Clang.takeTarget()); > + > Act->EndSourceFile(); > - > + > Clang.takeDiagnosticClient(); > - Clang.takeInvocation(); > - > - AST->Invocation.reset(Clang.takeInvocation()); > - return AST.take(); > - > + > + Invocation.reset(Clang.takeInvocation()); > + return false; > + > error: > Clang.takeSourceManager(); > Clang.takeFileManager(); > Clang.takeDiagnosticClient(); > + Invocation.reset(Clang.takeInvocation()); > + return true; > +} > + > + > +ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI, > + llvm::IntrusiveRefCntPtr<Diagnostic> > Diags, > + bool OnlyLocalDecls, > + bool CaptureDiagnostics) { > + if (!Diags.getPtr()) { > + // No diagnostics engine was provided, so create our own diagnostics > object > + // with the default options. > + DiagnosticOptions DiagOpts; > + Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0); > + } > + > + // Create the AST unit. > + llvm::OwningPtr<ASTUnit> AST; > + AST.reset(new ASTUnit(false)); > + AST->Diagnostics = Diags; > + AST->CaptureDiagnostics = CaptureDiagnostics; > + AST->OnlyLocalDecls = OnlyLocalDecls; > + AST->Invocation.reset(CI); > + > + if (!AST->Parse()) > + return AST.take(); > + > return 0; > } > > @@ -459,3 +495,19 @@ > return LoadFromCompilerInvocation(CI.take(), Diags, OnlyLocalDecls, > CaptureDiagnostics); > } > + > +bool ASTUnit::Reparse(RemappedFile *RemappedFiles, unsigned > NumRemappedFiles) { > + if (!Invocation.get()) > + return true; > + > + // Clear out the diagnostics state. > + getDiagnostics().Reset(); > + > + // Remap files. > + Invocation->getPreprocessorOpts().clearRemappedFiles(); > + for (unsigned I = 0; I != NumRemappedFiles; ++I) > + Invocation->getPreprocessorOpts().addRemappedFile(RemappedFiles[I].first, > + > RemappedFiles[I].second); > + > + return Parse(); > +} > > Modified: cfe/trunk/test/Index/cindex-from-source.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/cindex-from-source.m?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/test/Index/cindex-from-source.m (original) > +++ cfe/trunk/test/Index/cindex-from-source.m Mon Jul 19 16:46:24 2010 > @@ -7,3 +7,6 @@ > // CHECK: cindex-from-source.m:9:1: TypeRef=t0:1:13 Extent=[9:1 - 9:3] > struct s0 {}; > t0 g0; > + > +// RUN: c-index-test -test-load-source-reparse 5 local %s -include %t.pfx.h > > %t > +// RUN: FileCheck %s < %t > > Modified: cfe/trunk/tools/c-index-test/c-index-test.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/tools/c-index-test/c-index-test.c (original) > +++ cfe/trunk/tools/c-index-test/c-index-test.c Mon Jul 19 16:46:24 2010 > @@ -558,7 +558,7 @@ > struct CXUnsavedFile *unsaved_files = 0; > int num_unsaved_files = 0; > int result; > - > + > Idx = clang_createIndex(/* excludeDeclsFromPCH */ > !strcmp(filter, "local") ? 1 : 0, > /* displayDiagnosics=*/1); > @@ -578,6 +578,7 @@ > unsaved_files); > if (!TU) { > fprintf(stderr, "Unable to load translation unit!\n"); > + free_remapped_files(unsaved_files, num_unsaved_files); > clang_disposeIndex(Idx); > return 1; > } > @@ -588,6 +589,57 @@ > return result; > } > > +int perform_test_reparse_source(int argc, const char **argv, int trials, > + const char *filter, CXCursorVisitor Visitor, > + PostVisitTU PV) { > + const char *UseExternalASTs = > + getenv("CINDEXTEST_USE_EXTERNAL_AST_GENERATION"); > + CXIndex Idx; > + CXTranslationUnit TU; > + struct CXUnsavedFile *unsaved_files = 0; > + int num_unsaved_files = 0; > + int result; > + int trial; > + > + Idx = clang_createIndex(/* excludeDeclsFromPCH */ > + !strcmp(filter, "local") ? 1 : 0, > + /* displayDiagnosics=*/1); > + > + if (UseExternalASTs && strlen(UseExternalASTs)) > + clang_setUseExternalASTGeneration(Idx, 1); > + > + if (parse_remapped_files(argc, argv, 0, &unsaved_files, > &num_unsaved_files)) { > + clang_disposeIndex(Idx); > + return -1; > + } > + > + TU = clang_createTranslationUnitFromSourceFile(Idx, 0, > + argc - num_unsaved_files, > + argv + num_unsaved_files, > + num_unsaved_files, > + unsaved_files); > + if (!TU) { > + fprintf(stderr, "Unable to load translation unit!\n"); > + free_remapped_files(unsaved_files, num_unsaved_files); > + clang_disposeIndex(Idx); > + return 1; > + } > + > + for (trial = 0; trial < trials; ++trial) { > + if (clang_reparseTranslationUnit(TU, num_unsaved_files, unsaved_files)) { > + clang_disposeTranslationUnit(TU); > + free_remapped_files(unsaved_files, num_unsaved_files); > + clang_disposeIndex(Idx); > + return -1; > + } > + } > + > + result = perform_test_load(Idx, TU, filter, NULL, Visitor, PV); > + free_remapped_files(unsaved_files, num_unsaved_files); > + clang_disposeIndex(Idx); > + return result; > +} > + > /******************************************************************************/ > /* Logic for testing clang_getCursor(). > */ > /******************************************************************************/ > @@ -1219,6 +1271,8 @@ > "[FileCheck prefix]\n" > " c-index-test -test-load-source <symbol filter> {<args>}*\n"); > fprintf(stderr, > + " c-index-test -test-load-source-reparse <trials> <symbol filter> " > + " {<args>}*\n" > " c-index-test -test-load-source-usrs <symbol filter> {<args>}*\n" > " c-index-test -test-annotate-tokens=<range> {<args>}*\n" > " c-index-test -test-inclusion-stack-source {<args>}*\n" > @@ -1252,6 +1306,14 @@ > return perform_test_load_tu(argv[2], argv[3], argc >= 5 ? argv[4] : 0, > I, > NULL); > } > + else if (argc >= 5 && strncmp(argv[1], "-test-load-source-reparse", 25) == > 0){ > + CXCursorVisitor I = GetVisitor(argv[1] + 25); > + if (I) { > + int trials = atoi(argv[2]); > + return perform_test_reparse_source(argc - 4, argv + 4, trials, > argv[3], I, > + NULL); > + } > + } > else if (argc >= 4 && strncmp(argv[1], "-test-load-source", 17) == 0) { > CXCursorVisitor I = GetVisitor(argv[1] + 17); > if (I) > > Modified: cfe/trunk/tools/libclang/CIndex.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/tools/libclang/CIndex.cpp (original) > +++ cfe/trunk/tools/libclang/CIndex.cpp Mon Jul 19 16:46:24 2010 > @@ -1390,6 +1390,25 @@ > delete static_cast<ASTUnit *>(CTUnit); > } > > +int clang_reparseTranslationUnit(CXTranslationUnit TU, > + unsigned num_unsaved_files, > + struct CXUnsavedFile *unsaved_files) { > + if (!TU) > + return 1; > + > + llvm::SmallVector<ASTUnit::RemappedFile, 4> RemappedFiles; > + for (unsigned I = 0; I != num_unsaved_files; ++I) { > + llvm::StringRef Data(unsaved_files[I].Contents, unsaved_files[I].Length); > + const llvm::MemoryBuffer *Buffer > + = llvm::MemoryBuffer::getMemBufferCopy(Data, unsaved_files[I].Filename); > + RemappedFiles.push_back(std::make_pair(unsaved_files[I].Filename, > + Buffer)); > + } > + > + return static_cast<ASTUnit *>(TU)->Reparse(RemappedFiles.data(), > + RemappedFiles.size())? 1 : 0; > +} > + > CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) { > if (!CTUnit) > return createCXString(""); > > Modified: cfe/trunk/tools/libclang/libclang.darwin.exports > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.darwin.exports?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/tools/libclang/libclang.darwin.exports (original) > +++ cfe/trunk/tools/libclang/libclang.darwin.exports Mon Jul 19 16:46:24 2010 > @@ -86,6 +86,7 @@ > _clang_isStatement > _clang_isTranslationUnit > _clang_isUnexposed > +_clang_reparseTranslationUnit > _clang_setUseExternalASTGeneration > _clang_tokenize > _clang_visitChildren > > Modified: cfe/trunk/tools/libclang/libclang.exports > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=108756&r1=108755&r2=108756&view=diff > ============================================================================== > --- cfe/trunk/tools/libclang/libclang.exports (original) > +++ cfe/trunk/tools/libclang/libclang.exports Mon Jul 19 16:46:24 2010 > @@ -86,6 +86,7 @@ > clang_isStatement > clang_isTranslationUnit > clang_isUnexposed > +clang_reparseTranslationUnit > clang_setUseExternalASTGeneration > clang_tokenize > clang_visitChildren > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
