[cfe-commits] r80859 - in /cfe/trunk: include/clang-c/Index.h include/clang/Frontend/ASTUnit.h lib/Frontend/ASTUnit.cpp tools/CIndex/CIndex.cpp tools/CIndex/CIndex.exports tools/c-index-test/c-index-test.c
steve naroff
snaroff at apple.com
Thu Sep 3 08:50:16 PDT 2009
On Sep 3, 2009, at 2:02 AM, Daniel Dunbar wrote:
> Hi Steve,
>
> Sorry, I had to revert this (and the next commit, which depended on
> it), it was breaking all the index tests in a number of places.
>
No problem. I just reapplied the 'harmless' code with some other
changes.
I'll fix the problem with ASTUnit separately.
Thanks (and sorry for the breakage),
snaroff
> I tried to look into but I don't really understand what's going on...
> the problem is some kind of spurious free / double free:
> --
> (gdb) r
> Starting program:
> /Volumes/Data/Users/ddunbar/llvm.obj.64/Debug/bin/index-test
> /Volumes/Data/Users/ddunbar/llvm.obj.64/tools/clang/test/Output/
> Index/find-decls.c.tmp1.ast
> /Volumes/Data/Users/ddunbar/llvm.obj.64/tools/clang/test/Output/
> Index/find-decls.c.tmp2.ast
> -point-at /Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/
> t1.c:8:7
> -print-decls
> Reading symbols for shared libraries +++. done
> [Decl: Function bar_func]
> </Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/foo.h:4:6,
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/foo.h:4:19>
> [Decl: Function bar_func]
> </Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/t2.c:5:6,
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/t2.c:11:1>
> [Decl: Function bar_func]
> </Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/foo.h:4:6,
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/test/Index/foo.h:4:19>
> index-test(56219) malloc: *** error for object 0x101009000: pointer
> being freed was not allocated
> *** set a breakpoint in malloc_error_break to debug
>
> Program received signal SIGABRT, Aborted.
> 0x00007fff87250096 in __kill ()
> (gdb) bt
> #0 0x00007fff87250096 in __kill ()
> #1 0x00007fff872f10c2 in abort ()
> #2 0x00007fff87208215 in free ()
> #3 0x00000001000692dc in clang::ExternalASTSource::~ExternalASTSource
> (this=0x101009000) at
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/lib/AST/ASTContext.cpp:
> 4040
> #4 0x000000010007db20 in
> llvm::OwningPtr<clang::ExternalASTSource>::~OwningPtr
> (this=0x101012288) at OwningPtr.h:35
> #5 0x000000010007ab9d in clang::ASTContext::~ASTContext
> (this=0x101011e00) at
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/lib/AST/ASTContext.cpp:91
> #6 0x000000010002ac3f in
> llvm::OwningPtr<clang::ASTContext>::~OwningPtr (this=0x1008002a0) at
> OwningPtr.h:35
> #7 0x00000001000298ca in clang::ASTUnit::~ASTUnit (this=0x100800270)
> at /Volumes/Data/Users/ddunbar/llvm/tools/clang/lib/Frontend/
> ASTUnit.cpp:29
> #8 0x000000010000acbb in llvm::OwningPtr<clang::ASTUnit>::~OwningPtr
> (this=0x1008068a8) at OwningPtr.h:35
> #9 0x000000010000ae00 in TUnit::~TUnit (this=0x1008068a0) at
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/tools/index-test/index-
> test.cpp:59
> #10 0x0000000100005bb1 in main (argc=6, argv=0x7fff5fbff180) at
> /Volumes/Data/Users/ddunbar/llvm/tools/clang/tools/index-test/index-
> test.cpp:301
> --
>
> Can you take a look?
>
> - Daniel
>
> On Wed, Sep 2, 2009 at 5:32 PM, Steve Naroff<snaroff at apple.com> wrote:
>> Author: snaroff
>> Date: Wed Sep 2 19:32:06 2009
>> New Revision: 80859
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=80859&view=rev
>> Log:
>> Visit function/method bodies and issue callback for parameters and
>> local variables.
>> Add clang_getTranslationUnitSpelling().
>>
>>
>> Modified:
>> cfe/trunk/include/clang-c/Index.h
>> cfe/trunk/include/clang/Frontend/ASTUnit.h
>> cfe/trunk/lib/Frontend/ASTUnit.cpp
>> cfe/trunk/tools/CIndex/CIndex.cpp
>> cfe/trunk/tools/CIndex/CIndex.exports
>> cfe/trunk/tools/c-index-test/c-index-test.c
>>
>> Modified: cfe/trunk/include/clang-c/Index.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/include/clang-c/Index.h (original)
>> +++ cfe/trunk/include/clang-c/Index.h Wed Sep 2 19:32:06 2009
>> @@ -95,6 +95,8 @@
>> CXIndex, const char *ast_filename
>> );
>>
>> +const char *clang_getTranslationUnitSpelling(CXTranslationUnit
>> CTUnit);
>> +
>> /*
>> Usage: clang_loadTranslationUnit(). Will load the toplevel
>> declarations
>> within a translation unit, issuing a 'callback' for each one.
>>
>> Modified: cfe/trunk/include/clang/Frontend/ASTUnit.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/include/clang/Frontend/ASTUnit.h (original)
>> +++ cfe/trunk/include/clang/Frontend/ASTUnit.h Wed Sep 2 19:32:06
>> 2009
>> @@ -28,6 +28,7 @@
>> class Preprocessor;
>> class ASTContext;
>> class Decl;
>> + class PCHReader;
>>
>> /// \brief Utility class for loading a ASTContext from a PCH file.
>> ///
>> @@ -39,6 +40,7 @@
>> llvm::OwningPtr<TargetInfo> Target;
>> llvm::OwningPtr<Preprocessor> PP;
>> llvm::OwningPtr<ASTContext> Ctx;
>> + llvm::OwningPtr<PCHReader> Reader;
>>
>> ASTUnit(const ASTUnit&); // do not implement
>> ASTUnit &operator=(const ASTUnit &); // do not implement
>> @@ -59,6 +61,8 @@
>> const Diagnostic &getDiagnostic() const { return *Diags.get(); }
>> Diagnostic &getDiagnostic() { return *Diags.get(); }
>>
>> + const std::string &getOriginalSourceFileName();
>> +
>> /// \brief Create a ASTUnit from a PCH file.
>> ///
>> /// \param Filename PCH filename
>>
>> Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
>> +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Wed Sep 2 19:32:06 2009
>> @@ -77,6 +77,9 @@
>>
>> } // anonymous namespace
>>
>> +const std::string &ASTUnit::getOriginalSourceFileName() {
>> + return Reader->getOriginalSourceFile();
>> +}
>>
>> ASTUnit *ASTUnit::LoadFromPCHFile(const std::string &Filename,
>> FileManager &FileMgr,
>> @@ -101,10 +104,11 @@
>> std::string Predefines;
>> unsigned Counter;
>>
>> - llvm::OwningPtr<PCHReader> Reader;
>> + llvm::OwningPtr<PCHReader> Reader;
>> llvm::OwningPtr<ExternalASTSource> Source;
>>
>> Reader.reset(new PCHReader(SourceMgr, FileMgr, Diags));
>> + AST->Reader.reset(Reader.get());
>> Reader->setListener(new PCHInfoCollector(LangInfo, HeaderInfo,
>> TargetTriple,
>> Predefines, Counter));
>>
>>
>> Modified: cfe/trunk/tools/CIndex/CIndex.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/tools/CIndex/CIndex.cpp (original)
>> +++ cfe/trunk/tools/CIndex/CIndex.cpp Wed Sep 2 19:32:06 2009
>> @@ -67,6 +67,9 @@
>> break;
>> }
>> }
>> + void VisitVarDecl(VarDecl *ND) {
>> + Call(CXCursor_VarDecl, ND);
>> + }
>> void VisitFunctionDecl(FunctionDecl *ND) {
>> Call(ND->isThisDeclarationADefinition() ? CXCursor_FunctionDefn
>> :
>> CXCursor_FunctionDecl, ND);
>> @@ -95,6 +98,9 @@
>> CXClientData CData;
>>
>> void Call(enum CXCursorKind CK, NamedDecl *ND) {
>> + // Disable the callback when the context is equal to the
>> visiting decl.
>> + if (CDecl == ND)
>> + return;
>> CXCursor C = { CK, ND };
>> Callback(CDecl, C, CData);
>> }
>> @@ -129,17 +135,28 @@
>> void VisitFieldDecl(FieldDecl *ND) {
>> Call(CXCursor_FieldDecl, ND);
>> }
>> + void VisitVarDecl(VarDecl *ND) {
>> + Call(CXCursor_VarDecl, ND);
>> + }
>> + void VisitParmVarDecl(ParmVarDecl *ND) {
>> + Call(CXCursor_ParmDecl, ND);
>> + }
>> void VisitObjCPropertyDecl(ObjCPropertyDecl *ND) {
>> Call(CXCursor_ObjCPropertyDecl, ND);
>> }
>> void VisitObjCIvarDecl(ObjCIvarDecl *ND) {
>> Call(CXCursor_ObjCIvarDecl, ND);
>> }
>> + void VisitFunctionDecl(FunctionDecl *ND) {
>> + if (ND->isThisDeclarationADefinition()) {
>> + VisitDeclContext(dyn_cast<DeclContext>(ND));
>> + }
>> + }
>> void VisitObjCMethodDecl(ObjCMethodDecl *ND) {
>> if (ND->getBody()) {
>> Call(ND->isInstanceMethod() ? CXCursor_ObjCInstanceMethodDefn
>> : CXCursor_ObjCClassMethodDefn,
>> ND);
>> - // FIXME: load body.
>> + VisitDeclContext(dyn_cast<DeclContext>(ND));
>> } else
>> Call(ND->isInstanceMethod() ? CXCursor_ObjCInstanceMethodDecl
>> : CXCursor_ObjCClassMethodDecl,
>> ND);
>> @@ -167,6 +184,12 @@
>> return ASTUnit::LoadFromPCHFile(astName, CXXIdx-
>> >getFileManager(), &ErrMsg);
>> }
>>
>> +const char *clang_getTranslationUnitSpelling(CXTranslationUnit
>> CTUnit)
>> +{
>> + assert(CTUnit && "Passed null CXTranslationUnit");
>> + ASTUnit *CXXUnit = static_cast<ASTUnit *>(CTUnit);
>> + return CXXUnit->getOriginalSourceFileName().c_str();
>> +}
>>
>> void clang_loadTranslationUnit(CXTranslationUnit CTUnit,
>> CXTranslationUnitIterator callback,
>>
>> Modified: cfe/trunk/tools/CIndex/CIndex.exports
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.exports?rev=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/tools/CIndex/CIndex.exports (original)
>> +++ cfe/trunk/tools/CIndex/CIndex.exports Wed Sep 2 19:32:06 2009
>> @@ -19,3 +19,4 @@
>> _clang_isDefinition
>> _clang_getCursorSpelling
>> _clang_getCursorKindSpelling
>> +_clang_getTranslationUnitSpelling
>>
>> 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=80859&r1=80858&r2=80859&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
>> +++ cfe/trunk/tools/c-index-test/c-index-test.c Wed Sep 2 19:32:06
>> 2009
>> @@ -3,25 +3,27 @@
>> #include "clang-c/Index.h"
>> #include <stdio.h>
>>
>> +static void PrintCursor(CXCursor Cursor) {
>> + printf("%s => %s", clang_getCursorKindSpelling(Cursor.kind),
>> + clang_getCursorSpelling(Cursor));
>> + printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
>> + clang_getCursorLine(Cursor),
>> + clang_getCursorColumn(Cursor));
>> +}
>> +
>> static void DeclVisitor(CXDecl Dcl, CXCursor Cursor, CXClientData
>> Filter)
>> {
>> - if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
>> - printf("%s => %s", clang_getCursorKindSpelling(Cursor.kind),
>> - clang_getCursorSpelling(Cursor));
>> - printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
>> - clang_getCursorLine(Cursor),
>> - clang_getCursorColumn(Cursor));
>> - }
>> + printf("%s: ", clang_getDeclSpelling(Dcl));
>> + if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter))
>> + PrintCursor(Cursor);
>> }
>> +
>> static void TranslationUnitVisitor(CXTranslationUnit Unit,
>> CXCursor Cursor,
>> CXClientData Filter)
>> {
>> + printf("%s: ", clang_getTranslationUnitSpelling(Unit));
>> if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
>> - printf("%s => %s", clang_getCursorKindSpelling(Cursor.kind),
>> - clang_getCursorSpelling(Cursor));
>> - printf(" (%s,%d:%d)\n", clang_getCursorSource(Cursor),
>> - clang_getCursorLine(Cursor),
>> - clang_getCursorColumn(Cursor));
>> + PrintCursor(Cursor);
>>
>> clang_loadDeclaration(Cursor.decl, DeclVisitor, 0);
>> }
>>
>>
>> _______________________________________________
>> 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