[PATCH] D13946: Shrink DynTypedNode by one pointer from 40 to 32 bytes (on x86_64).

Samuel Benzaquen via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 21 08:45:19 PDT 2015


sbenza added inline comments.

================
Comment at: include/clang/AST/ASTTypeTraits.h:250
@@ +249,3 @@
+    return NodeKind.hasPointerIdentity()
+               ? *reinterpret_cast<void *const *>(Storage.buffer)
+               : nullptr;
----------------
I'm not sure about this reinterpret_cast.
We are not storing void*. We are storing 'const Node*'.
I think this way is UB.

Maybe we should modify the union and the create/getUnchecked methods to use 'const void*' as storage instead.
Instead of:

```
new (Result.Storage.buffer) const BaseT * (&Node);
...
return *cast<T>(*reinterpret_cast<BaseT *const *>(Storage));
```
we should do

```
new (Result.Storage.buffer) const void * (static_cast<const BaseT*>(&Node));
...
return *cast<T>(static_cast<const BaseT*>(*reinterpret_cast<const void *const *>(Storage)));
```





http://reviews.llvm.org/D13946





More information about the cfe-commits mailing list