[cfe-commits] r84198 - in /cfe/trunk: include/clang-c/Index.h tools/CIndex/CIndex.cpp tools/CIndex/CIndex.exports
Daniel Dunbar
daniel at zuster.org
Sat Oct 17 19:09:05 PDT 2009
Hi Steve,
I just noticed another problem here...
On Thu, Oct 15, 2009 at 1:04 PM, Steve Naroff <snaroff at apple.com> wrote:
> Author: snaroff
> Date: Thu Oct 15 15:04:39 2009
> New Revision: 84198
>
> URL: http://llvm.org/viewvc/llvm-project?rev=84198&view=rev
> Log:
> Implement <rdar://problem/7303432> [Clang/Index] In-memory-style AST generation API (initial API implementation).
>
> Added clang_createTranslationUnitFromSourceFile().
> Changed clang_createIndex() to lookup the location of clang (using dladdr).
>
> Modified:
> cfe/trunk/include/clang-c/Index.h
> cfe/trunk/tools/CIndex/CIndex.cpp
> cfe/trunk/tools/CIndex/CIndex.exports
>
> ==============================================================================
> --- cfe/trunk/tools/CIndex/CIndex.cpp (original)
> +++ cfe/trunk/tools/CIndex/CIndex.cpp Thu Oct 15 15:04:39 2009
...
> +static const char *clangPath;
> +
> CXIndex clang_createIndex()
> {
> // FIXME: Program is leaked.
> +
> + // Find the location where this library lives (libCIndex.dylib).
> + // We do the lookup here to avoid poking dladdr too many times.
> + // This silly cast below avoids a C++ warning.
> + Dl_info info;
> + if (dladdr((void *)(uintptr_t)clang_createTranslationUnit, &info) == 0)
> + assert(0 && "Call to dladdr() failed");
> +
> + llvm::sys::Path CIndexPath(info.dli_fname);
> + std::string CIndexDir = CIndexPath.getDirname();
> +
> + // We now have the CIndex directory, locate clang relative to it.
> + std::string ClangPath = CIndexDir + "/../bin/clang";
> +
> + clangPath = ClangPath.c_str();
This isn't safe, its storing a dangling pointer into clangPath. Also,
it would be good not to add a global variable.
I think it would be better to have this live in CXIndex. While at it,
it makes sense to lazily compute it, for clients that don't use
clang_createTranslationUnitFromSourceFile.
- Daniel
More information about the cfe-commits
mailing list