[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