[PATCH] D64569: [OpenCL] Improve destructor support in C++ for OpenCL

Marco Antognini via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 18 09:39:38 PDT 2019

mantognini reopened this revision.
mantognini added a subscriber: ilya-biryukov.
mantognini added a comment.
This revision is now accepted and ready to land.

While investigating PR42665, I've noticed that `getImplicitObjectArgument` doesn't always return a pointer type. For example, when dealing with `shared_ptr`. In libc++'s test std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp, dumping `CE` in `EmitVirtualDestructorCall` shows that the callee is `.~Bar` (mind the `.`):

  CXXMemberCallExpr 0x29d10a0 'void'
  `-MemberExpr 0x29d1070 '<bound member function type>' .~Bar 0x23f5250
    `-CXXMemberCallExpr 0x29d1040 'struct Bar':'struct Bar' lvalue
      `-MemberExpr 0x29d1010 '<bound member function type>' .second 0x2883328
        `-MemberExpr 0x29d0f80 '__compressed_pair<class std::__1::allocator<struct Bar>, struct Bar>':'class std::__1::__compressed_pair<class std::__1::allocator<struct Bar>, struct Bar>' lvalue ->__data_ 0x2896960
          `-CXXThisExpr 0x29d0f70 'class std::__1::__shared_ptr_emplace<struct Bar, class std::__1::allocator<struct Bar> > *' implicit this

However, for CodeGenCXX/virtual-pseudo-destructor-call.cpp in clang test suite, `CE` is this (mind the `->` this time):

  CXXMemberCallExpr 0x7787a8 'void'
  `-MemberExpr 0x778750 '<bound member function type>' ->~A 0x778288
    `-ImplicitCastExpr 0x778738 'struct A *' <LValueToRValue>
      `-DeclRefExpr 0x778708 'struct A *' lvalue ParmVar 0x778558 'a' 'struct A *'

Tomorrow, I'll try to reduce libc++ failing tests and add it to Clang's suite as part of this review. For now, I've run `check-all` and it seems that no test are failing anymore (with the patch I'm about to upload).

However, I'm not sure whether `getImplicitObjectArgument` is expected to have either pointer or non-pointer type. I guess it is, but, John, Ilya, could either of you confirm this?

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list