rsmith added inline comments.

Comment at: lib/AST/ItaniumMangle.cpp:668
@@ -664,3 +667,3 @@
   llvm::raw_svector_ostream FunctionEncodingStream(FunctionEncodingBuf);
   CXXNameMangler FunctionEncodingMangler(*this, FunctionEncodingStream);
   // Output name of the function.
DmitryPolukhin wrote:
> rsmith wrote:
> > Maybe it'd be simpler to just override the output stream here rather than 
> > creating a new mangler?
> I'm not sure that it is simpler because it will also require substitutions 
> save/restore for name mangling (mangleNameWithAbiTags) to produce the same 
> substitutions twice (without implicate abi_tags and later with implicit 
> abi_tags). IMHO, it is almost identical approaches but current one is a bit 
> cleaner because it copies explicitly everything required from temp to outer 
> mangler.
I think we'd want to override the output stream to write to a temporary buffer 
at the point when we would otherwise write out the ABI tags, to avoid needing 
to save/restore any substitutions. But I agree, that seems more invasive than 
what you're doing here. I'll leave this up to you.

Comment at: lib/AST/ItaniumMangle.cpp:4439
@@ +4438,3 @@
+  if (Other.SeqID > SeqID) {
+    Substitutions = Other.Substitutions;
+    SeqID = Other.SeqID;
Please avoid the cost of a full copy here by making this a destructive 
operation on `Other` -- use `swap` or move-assignment here. (We'll still be 
paying for one copy of the substitution set per function mangling, which is 
unfortunate / undesirable.)

cfe-commits mailing list

Reply via email to