[cfe-commits] r77490 - in /cfe/trunk: lib/CodeGen/CGExpr.cpp lib/Sema/Sema.h lib/Sema/SemaExpr.cpp test/CodeGenCXX/constructor-init.cpp

Douglas Gregor dgregor at apple.com
Wed Jul 29 11:52:21 PDT 2009


On Jul 29, 2009, at 11:40 AM, Fariborz Jahanian wrote:

> Author: fjahanian
> Date: Wed Jul 29 13:40:24 2009
> New Revision: 77490
>
> URL: http://llvm.org/viewvc/llvm-project?rev=77490&view=rev
> Log:
> Patch to provide cast of objects in member access
> excpression, if needed, and remove some ir-gen code
> now unnencessary.

Thanks, that's much cleaner! There's a comment below:

> +/// \brief Cast member's object to its own class if necessary.
> +void
> +Sema::PerformObjectMemberConversion(Expr *&From, NamedDecl *Member) {
> +  if (FieldDecl *FD = dyn_cast<FieldDecl>(Member))
> +    if (CXXRecordDecl *RD =
> +        dyn_cast<CXXRecordDecl>(FD->getDeclContext())) {
> +      QualType DestType =
> +        Context.getCanonicalType(Context.getTypeDeclType(RD));
> +      if (!DestType->isDependentType() &&
> +          !From->getType()->isDependentType()) {
> +        if (From->getType()->getAsPointerType())
> +          DestType = Context.getPointerType(DestType);
> +        ImpCastExprToType(From, DestType, /*isLvalue=*/true);
> +      }
> +    }
> +}

This routine should call CheckDerivedToBaseConversion to make sure  
that the conversion is valid (e.g., it doesn't convert to an  
inaccessible or ambiguous base class).

	- Doug



More information about the cfe-commits mailing list