[cfe-commits] [PATCH] Grab bag of Microsoft C++ ABI Mangler fixes
Richard Smith
richard at metafoo.co.uk
Mon Jun 11 18:22:10 PDT 2012
On Sun, Jun 10, 2012 at 10:51 PM, Charles Davis <cdavis at mymail.mines.edu>wrote:
>
> On Jun 9, 2012, at 5:49 PM, Richard Smith wrote:
>
> On Sat, Jun 9, 2012 at 2:41 PM, Charles Davis <cdavis at mymail.mines.edu>wrote:
>
>> Hi,
>>
>> This is a grab bag of various fixes to the VC++ name mangler.
>>
>> - The mangler is now capable of mangling the names of virtual function
>> tables--but not virtual base tables. That needs a serious refactoring of
>> the ManglerContext's interface.
>> - Local names are now mangled correctly--complete with anonymous numbered
>> scopes. I needed this to make the virtual table test case--which I copied
>> from the Itanium ABI test cases--work.
>> - Instead of throwing an llvm_unreachable(), unimplemented cases now
>> raise a compiler error. (This was the hardest part, since I needed source
>> locations to give to the DiagnosticsEngine.
>>
>> This is a big patch, so I wanted to run it past the list before I commit.
>> OK to commit?
>>
>
> @@ -1087,10 +1211,22 @@
> Dimensions.push_back(CAT->getSize());
> ElementTy = CAT->getElementType();
> } else if (ElementTy->isVariableArrayType()) {
> - llvm_unreachable("Don't know how to mangle VLAs!");
> + const VariableArrayType *VAT =
> + static_cast<const VariableArrayType *>(ElementTy.getTypePtr());
>
> Don't do this, use ASTContext::getAsVariableArrayType(ElementTy) instead.
>
> Now how did that get past? Fixed.
>
>
> Can you use a SmallVector<TemplateArgumentLoc> rather than allocating
> ASTTemplateArgumentListInfo objects in isTemplate?
>
> Done.
>
>
> Several of your "cannot mangle this yet" diagnostics have unwanted
> fallthrough. Should these be fatal?
>
> I've fixed all of them to return early.
>
I think there are now cases where two declarations mangle to the same name,
which could result in a crash in IRGen after your custom error is produced,
but I don't think that's a disaster given the context.
> I would remove "Oddly enough, " throughout.
>
> Done. It is too informal anyway.
>
>
> Is there a reason to create a new test file rather than adding tests to
> mangle-ms.cpp?
>
> Because the corresponding tests for the Itanium ABI (on which these are
> based) were in a separate file (cf.
> <clang>/test/CodeGenCXX/mangle-abi-examples.cpp).
>
> New patch attached. OK to commit?
>
Sure. Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120611/b4be2853/attachment.html>
More information about the cfe-commits
mailing list