diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2009-10-18 11:10:55 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2009-10-18 11:10:55 +0000 |
commit | 817e7e4fb834e8efcbb02c5784d1edde24a12d24 (patch) | |
tree | 51c9a3406b43ff46cc71d2bcd87067e70299e22e | |
parent | cebee16bc05ed6ca88041e916ef803b088f495f2 (diff) | |
download | bcm5719-llvm-817e7e4fb834e8efcbb02c5784d1edde24a12d24.tar.gz bcm5719-llvm-817e7e4fb834e8efcbb02c5784d1edde24a12d24.zip |
CIndex: avoid a dangling pointer issue.
llvm-svn: 84413
-rw-r--r-- | clang/tools/CIndex/CIndex.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index 6015ffdd4ca..c262f672870 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -268,7 +268,8 @@ public: class CIndexer : public Indexer { public: - explicit CIndexer(Program *prog) : Indexer(*prog), OnlyLocalDecls(false) {} + explicit CIndexer(Program *prog, std::string &path) + : Indexer(*prog), OnlyLocalDecls(false), ClangPath(path) {} virtual ~CIndexer() { delete &getProgram(); } @@ -277,17 +278,17 @@ public: /// declarations. bool getOnlyLocalDecls() const { return OnlyLocalDecls; } void setOnlyLocalDecls(bool Local = true) { OnlyLocalDecls = Local; } - + + const std::string& getClangPath() { return ClangPath; } private: bool OnlyLocalDecls; + std::string ClangPath; }; } extern "C" { -static const char *clangPath; - CXIndex clang_createIndex() { // FIXME: This is a hack to unbreak the MSVC build. @@ -308,9 +309,7 @@ CXIndex clang_createIndex() // We now have the CIndex directory, locate clang relative to it. std::string ClangPath = CIndexDir + "/../bin/clang"; - clangPath = ClangPath.c_str(); - - return new CIndexer(new Program()); + return new CIndexer(new Program(), ClangPath); } void clang_disposeIndex(CXIndex CIdx) @@ -345,7 +344,7 @@ CXTranslationUnit clang_createTranslationUnitFromSourceFile( #else // Build up the arguments for involing clang. std::vector<const char *> argv; - argv.push_back(clangPath); + argv.push_back(static_cast<CIndexer *>(CIdx)->getClangPath().c_str()); argv.push_back("-emit-ast"); argv.push_back(source_filename); argv.push_back("-o"); |