We also discussed how to deal with the ARM side brokenness when clang compiles 
this code:
  struct A { virtual ~A(); };
  struct B { virtual ~B(); };
  struct C : A, B { virtual ~C(); };
  C::~C() {}
The deleting destructor thunk for B lies about it's return value. The 
'returned' attribute is also a lie.

================
Comment at: lib/CodeGen/CGCXXABI.h:94-96
@@ -93,3 +93,5 @@
   /// when called virtually, and code generation does not support the case.
   virtual bool HasThisReturn(GlobalDecl GD) const { return false; }
 
+  virtual bool hasMostDerivedReturn(GlobalDecl GD) const { return false; }
+
----------------
Can we write a wrapper for these that takes the this type and returns the 
return type of void, void*, or decltype(this)?

================
Comment at: lib/CodeGen/CGCall.cpp:241
@@ +240,3 @@
+                               ? ArgTypes.front()
+                               : TheCXXABI.hasMostDerivedReturn(GD)
+                                     ? CGM.getContext().VoidPtrTy
----------------
Does it make sense to check this for constructors, given that ctors can't 
really return the most derived types?

http://reviews.llvm.org/D5996



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to