[PATCH] Fix PR17738 - add support for vtordisp thunks when using -cxx-abi microsoft

Reid Kleckner rnk at google.com
Tue Nov 5 11:08:12 PST 2013


Comment at: lib/AST/MicrosoftMangle.cpp:1849
@@ -1848,2 +1848,3 @@
                                       MicrosoftCXXNameMangler &Mangler,
                                       raw_ostream &Out) {
+  if (!Adjustment.Virtual.isEmpty()) {
Timur Iskhodzhanov wrote:
> Reid Kleckner wrote:
> > This is complicated enough that it deserves it's own BNF comment with portions of the mangleFunctionClass() BNF diagram.  The G, O, W and A, I, Q access codes clearly correspond to it.
> Agreed. I'm not a BNF master, so formatting/content suggestions are welcome!
> It has actually reminded me we might sometimes have far thunks... I'm not sure when are they needed (hey, why would you need more than +-2^31 to adjust this inside a record type?) so I've added a FIXME. Anyways, the mangleFunctionClass didn't ever handle "far" functions either.
Looks good.

"far" isn't related to displacement, it's related to segments and 16-bit Windows.  Thankfully it's dead and we don't support it.  :)

Comment at: lib/CodeGen/MicrosoftCXXABI.cpp:998
@@ +997,3 @@
+    if (TA.Virtual.Microsoft.VBPtrOffset) {
+      assert(TA.Virtual.Microsoft.VBPtrOffset > 0);
This corresponds to vtordispex thunks, right?  Can you put in some comments about that, or name give names to the IR nodes?


More information about the cfe-commits mailing list