[cfe-commits] r100213 - in /cfe/trunk: include/clang/AST/DeclObjC.h lib/AST/ASTImporter.cpp lib/AST/DeclObjC.cpp
Fariborz Jahanian
fjahanian at apple.com
Fri Apr 2 13:19:26 PDT 2010
On Apr 2, 2010, at 1:10 PM, Daniel Dunbar wrote:
> Author: ddunbar
> Date: Fri Apr 2 15:10:03 2010
> New Revision: 100213
>
> URL: http://llvm.org/viewvc/llvm-project?rev=100213&view=rev
> Log:
> Sema/Obj-C: Narrow type of ObjCIvarDecl::Create, and check
> additional invariants on the provided DeclContext.
> - Doug, please see the FIXME in DeclObjC.cpp -- I am not sure what
> the right fix is.
>
> Modified:
> cfe/trunk/include/clang/AST/DeclObjC.h
> cfe/trunk/lib/AST/ASTImporter.cpp
> cfe/trunk/lib/AST/DeclObjC.cpp
>
> Modified: cfe/trunk/include/clang/AST/DeclObjC.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=100213&r1=100212&r2=100213&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/include/clang/AST/DeclObjC.h (original)
> +++ cfe/trunk/include/clang/AST/DeclObjC.h Fri Apr 2 15:10:03 2010
> @@ -624,14 +624,14 @@
> };
>
> private:
> - ObjCIvarDecl(DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
> + ObjCIvarDecl(ObjCContainerDecl *DC, SourceLocation L,
> IdentifierInfo *Id,
> QualType T, TypeSourceInfo *TInfo, AccessControl ac,
> Expr *BW)
> : FieldDecl(ObjCIvar, DC, L, Id, T, TInfo, BW, /*Mutable=*/false),
> DeclAccess(ac) {}
>
> public:
> - static ObjCIvarDecl *Create(ASTContext &C, DeclContext *DC,
> SourceLocation L,
> - IdentifierInfo *Id, QualType T,
> + static ObjCIvarDecl *Create(ASTContext &C, ObjCContainerDecl *DC,
> + SourceLocation L, IdentifierInfo *Id,
> QualType T,
> TypeSourceInfo *TInfo,
> AccessControl ac, Expr *BW = NULL);
>
>
> Modified: cfe/trunk/lib/AST/ASTImporter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=100213&r1=100212&r2=100213&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/lib/AST/ASTImporter.cpp (original)
> +++ cfe/trunk/lib/AST/ASTImporter.cpp Fri Apr 2 15:10:03 2010
> @@ -2013,7 +2013,8 @@
> if (!BitWidth && D->getBitWidth())
> return 0;
>
> - ObjCIvarDecl *ToIvar =
> ObjCIvarDecl::Create(Importer.getToContext(), DC,
> + ObjCIvarDecl *ToIvar =
> ObjCIvarDecl::Create(Importer.getToContext(),
> +
> cast<ObjCContainerDecl>(DC),
> Loc,
> Name.getAsIdentifierInfo(),
> T, TInfo, D-
> >getAccessControl(),
> BitWidth);
>
> Modified: cfe/trunk/lib/AST/DeclObjC.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=100213&r1=100212&r2=100213&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/lib/AST/DeclObjC.cpp (original)
> +++ cfe/trunk/lib/AST/DeclObjC.cpp Fri Apr 2 15:10:03 2010
> @@ -561,10 +561,26 @@
> // ObjCIvarDecl
> //
> =
> =
> =
> ----------------------------------------------------------------------=
> ==//
>
> -ObjCIvarDecl *ObjCIvarDecl::Create(ASTContext &C, DeclContext *DC,
> +ObjCIvarDecl *ObjCIvarDecl::Create(ASTContext &C, ObjCContainerDecl
> *DC,
> SourceLocation L, IdentifierInfo
> *Id,
> QualType T, TypeSourceInfo *TInfo,
> AccessControl ac, Expr *BW) {
> + if (DC) {
> + // Ivar's can only appear in interfaces, implementations (via
> synthesized
> + // properties), and class extensions (via direct declaration,
> or synthesized
> + // properties).
> + //
> + // FIXME: This should really be asserting this:
> + // (isa<ObjCCategoryDecl>(DC) &&
> + // cast<ObjCCategoryDecl>(DC)->IsClassExtension()))
This should be enough as long as:
>
> + // but unfortunately we sometimes place ivars into non-class
> extension
> + // categories on error. This breaks an AST invariant, and
> should not be
We check for category case and error before attempting to create an
'ivar' for it.
- fariborz
>
> + // fixed.
> + assert((isa<ObjCInterfaceDecl>(DC) ||
> isa<ObjCImplementationDecl>(DC) ||
> + isa<ObjCCategoryDecl>(DC)) &&
> + "Invalid ivar decl context!");
> + }
> +
> return new (C) ObjCIvarDecl(DC, L, Id, T, TInfo, ac, BW);
> }
>
>
>
> _______________________________________________
> 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