[PATCH] D59988: [PR41276] Generate address space cast of 'this' for objects attributed by an address space in C++

Bruno De Fraine via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 1 01:35:18 PDT 2019


brunodf added inline comments.


================
Comment at: lib/CodeGen/CGClass.cpp:2025
+    ThisPtr =
+        Builder.CreatePointerBitCastOrAddrSpaceCast(This.getPointer(), NewType);
   }
----------------
rjmccall wrote:
> Anastasia wrote:
> > I am a bit unsure if `performAddrSpaceCast` should be used, but considering that we know that we are not casting a constant it should be fine?
> > 
> > If not any suggestions how to propagate `LangAS` of 'this' here. Some thoughts I have are:
> > - Try to list the conversion up in the call stack
> > - Pass `LangAS` all the way to here
> I feel like `This` should just be in the right address space for the constructor at the point `EmitCXXConstructorCall` is called.  We don't expect this function to do any other semantic conversions.  Or is this necessary to handle special-case use of things like trivial default / copy constructors?
Where could the conversion of `this` be listed in the clang AST? `this` seems implicit there.

Passing along `LangAS` seems to have some precedent. `EmitCXXConstructExpr` (which calls `EmitCXXConstructorCall`) works on `AggValueSlot` which carries the original qualifiers. Currently not yet used for address space (but this seems similar to me):

```
  /// \param quals - The qualifiers that dictate how the slot should
  /// be initialied. Only 'volatile' and the Objective-C lifetime
  /// qualifiers matter.
```



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59988/new/

https://reviews.llvm.org/D59988





More information about the cfe-commits mailing list