[cfe-commits] r146644 - in /cfe/trunk: include/clang/AST/DeclObjC.h include/clang/Serialization/ASTReader.h lib/AST/ASTImporter.cpp lib/AST/DeclObjC.cpp lib/AST/DeclPrinter.cpp lib/Sema/SemaCodeComplete.cpp lib/Sema/SemaDeclObjC.cpp lib/Sema/Sema

Francois Pichet pichet2000 at gmail.com
Thu Dec 15 03:59:29 PST 2011


On Thu, Dec 15, 2011 at 12:27 AM, Douglas Gregor <dgregor at apple.com> wrote:
> Author: dgregor
> Date: Wed Dec 14 23:27:12 2011
> New Revision: 146644
>
> URL: http://llvm.org/viewvc/llvm-project?rev=146644&view=rev
> Log:
> Move the definition-specific data of ObjCInterfaceDecl into a
> separately-allocated DefinitionData structure, which we manage the
> same way as CXXRecordDecl::DefinitionData. This prepares the way for
> making ObjCInterfaceDecls redeclarable, to more accurately model
> forward declarations of Objective-C classes and eliminate the mutation
> of ObjCInterfaceDecl that causes us serious trouble in the AST reader.
>
> Note that ObjCInterfaceDecl's accessors are fairly robust against
> being applied to forward declarations, because Clang (and Sema in
> particular) doesn't perform RequireCompleteType/hasDefinition() checks
> everywhere it has to. Each of these overly-robust cases is marked with
> a FIXME, which we can tackle over time.
>
>
>
> Modified:
>    cfe/trunk/include/clang/AST/DeclObjC.h
>    cfe/trunk/include/clang/Serialization/ASTReader.h
>    cfe/trunk/lib/AST/ASTImporter.cpp
>    cfe/trunk/lib/AST/DeclObjC.cpp
>    cfe/trunk/lib/AST/DeclPrinter.cpp
>    cfe/trunk/lib/Sema/SemaCodeComplete.cpp
>    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
>    cfe/trunk/lib/Sema/SemaExprObjC.cpp
>    cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
>    cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
>    cfe/trunk/tools/libclang/IndexingContext.cpp
>
>  void ObjCInterfaceDecl::LoadExternalDefinition() const {
> -  assert(ExternallyCompleted && "Class is not externally completed");
> -  ExternallyCompleted = false;
> +  assert(data().ExternallyCompleted && "Class is not externally completed");
> +  data().ExternallyCompleted = false;
>   getASTContext().getExternalSource()->CompleteType(
>                                         const_cast<ObjCInterfaceDecl *>(this));
>  }

Hi Doug, this revision is causing a huge regression on MSVC where
virtually every objc tests is failing.

I used to debugger to pointing the problem: For some reason
    getASTContext().getExternalSource() in LoadExternalDefinition()
return a null pointer on MSVC.




More information about the cfe-commits mailing list