[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