steakhal requested changes to this revision.
steakhal added a comment.
This revision now requires changes to proceed.

This patch does not model faithfully how reinterpretcasting member pointers 
should work.

The base specifiers represent the history for the member pointer (aka. mptr), 
describing how it was transformed to point wherever it currently points to.
If and only if the `PointerToMemberData` is `null`, then the represented member 
pointer is `null`.

`class PointerToMemberData` could have a bool `IsValid` field, representing 
whether or not this mptr is safely dereferancable or not.
Depending on this, loading a value via this mptr should result in `Undefined` 
or the associated value from the //store//.
Whenever you encounter a `reinterpret_cast` expression casting a valid mptr to 
a different type, the resulting `PointerToMemberData` should be the same as 
before **BUT** the `IsValid` field set to `false`!
Later, if it's cast back to the original type (which is probably the 
`NamedDecl` inside the `PointerToMemberData`, I don't know).

You should also change the way how the abstract machine loads a value from the 
//store// using an invalid mptr - as that should return `Undefined` instead of 
the actual associated value.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D96976

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to