[PATCH] [ms-cxxabi] Destroy temporary record arguments in the callee
Reid Kleckner
rnk at google.com
Wed Jun 19 15:04:21 PDT 2013
On Wed, Jun 19, 2013 at 5:17 PM, John McCall <rjmccall at apple.com> wrote:
> On Jun 19, 2013, at 1:44 PM, Reid Kleckner <rnk at google.com> wrote:
> > - Add conditional tests
> > - Deactivate cleanups in reverse
> > - Other comments.
>
> + /// \brief Are temporary objects passed by value to a call destroyed by
> the
> + /// callee?
> + bool isTemporaryDestroyedByCallee() const {
>
> Please embellish this comment to discuss the ways in which this is
> actually a major language difference.
>
Done.
> +void Sema::CheckByValParamsForDtors(FunctionDecl *FD) {
> +
> assert(Context.getTargetInfo().getCXXABI().isTemporaryDestroyedByCallee());
> + for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams;
> ++p) {
> + ParmVarDecl *Param = FD->getParamDecl(p);
> + if (CXXRecordDecl *RD = Param->getType()->getAsCXXRecordDecl()) {
> + if (CXXDestructorDecl *Dtor = LookupDestructor(RD)) {
> + // Don't call CheckDestructorAccess() or we'll reject valid TUs.
> + MarkFunctionReferenced(FD->getLocation(), Dtor);
> + DiagnoseUseOfDecl(Dtor, FD->getLocation());
> + }
> + }
> + }
> +}
> +
>
> I think this code is dead now?
>
Oops, deleted.
> You should add my test case, and then you'll need to go do some
> spelunking to make it pass, because you'll have to disable the check
> for a destructor when initializing a parameter temporary.
>
I'd rather err on the side of rejecting because MSVC rejects this for
example:
struct A {
A(const A &a); // Comment out to accept.
private:
~A();
friend void bar(A);
};
void bar(A a) { }
void foo(A *a) { bar(*a); } // error C2248: 'A::~A' : cannot access
private member declared in class 'A'
They seem to have some heuristics in their equivalent of Sema to guess
whether or not they'll need to call ~A. I don't know if we want to mirror
that or not.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130619/b5ddf01d/attachment.html>
More information about the cfe-commits
mailing list