[PATCH] [-cxx-abi microsoft] Mangle TemplateArgument::Declaration correctly for member pointers
Reid Kleckner
rnk at google.com
Fri Aug 30 10:30:09 PDT 2013
================
Comment at: lib/AST/MicrosoftMangle.cpp:891
@@ +890,3 @@
+ getASTContext().getCharWidth();
+ mangleIntegerLiteral(Offset, false);
+ } else
----------------
David Majnemer wrote:
> Reid Kleckner wrote:
> > There's a fair amount of complexity in member pointers.
> > - Can I mangle in a null data memptr here?
> > - The null representation is different between standard layout records (-1) and other records (0).
> > - Can I mangle a field from a base class that is not at offset 0?
> >
> > All this is currently handled in CodeGen/MicrosoftCXXABI.cpp, which this AST code can't depend on. We could raise some parts of it up into the AST CXXABI if needed.
> - Yes.
> - null data memptr get's mangled like -1 for standard layout records and 0 for other records.
> - Yes:
> ```
> struct base1 {
> int thing;
> virtual int fun();
> };
> struct base2 : virtual public base1 {
> int thing;
> virtual int fun2();
> };
> struct record : public base2, virtual public base1 {
> int first;
> int second;
> virtual int fun3();
> };
>
> template <int record::*>
> struct type2 {};
> type2<(int record::*)(&base2::thing)> memptr4;
> type2<(int record::*)(&base1::thing)> memptr5;
> ```
> get's mangled like so:
> ```
> struct type2<{8,0}> memptr4
> struct type2<{4,4}> memptr5
> ```
>
> Note that clang **refuses** to do anything with this C++ code.
Right, the refusal is covered by http://llvm.org/PR15713. I think clang can currently dereference and copy member pointers for classes with virtual inheritance, but it can't convert them across a virtual inheritance link.
These should work and will probably form similarly wide member pointers with a vbtable offset of 0:
type2<&base2::first> memptr6;
type2<&base2::second> memptr7;
Anyway, I think this means we need the member pointer layout code in the AST CXXABI, and then we can expose that back to CodeGen through ASTContext.
http://llvm-reviews.chandlerc.com/D1323
More information about the cfe-commits
mailing list