[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