[patch][pr22217] Use the most recent decl for mangling
David Majnemer
david.majnemer at gmail.com
Tue Jan 20 10:16:21 PST 2015
The following corrects the MS ABI test output:
--- a/lib/AST/MicrosoftMangle.cpp
+++ b/lib/AST/MicrosoftMangle.cpp
@@ -2329,6 +2329,7 @@ void
MicrosoftMangleContextImpl::mangleTypeName(QualType T, raw_ostream &Out) {
void MicrosoftMangleContextImpl::mangleCXXCtor(const CXXConstructorDecl *D,
CXXCtorType Type,
raw_ostream &Out) {
+ D = cast<CXXConstructorDecl>(D->getFirstDecl());
MicrosoftCXXNameMangler mangler(*this, Out);
mangler.mangle(D);
}
@@ -2336,6 +2337,7 @@ void MicrosoftMangleContextImpl::mangleCXXCtor(const
CXXConstructorDecl *D,
void MicrosoftMangleContextImpl::mangleCXXDtor(const CXXDestructorDecl *D,
CXXDtorType Type,
raw_ostream &Out) {
+ D = cast<CXXDestructorDecl>(D->getFirstDecl());
MicrosoftCXXNameMangler mangler(*this, Out, D, Type);
mangler.mangle(D);
}
On Tue, Jan 20, 2015 at 9:42 AM, David Majnemer <david.majnemer at gmail.com>
wrote:
> I don't think this approach would handle things like:
>
> int pr22217_foo;
> int *b = &pr22217_foo;
> extern int pr22217_foo __asm__("pr22217_bar");
>
> With your patch, pr22217_foo gets emitted.
> With gcc, pr22217_bar gets emitted.
>
> On Tue, Jan 20, 2015 at 7:30 AM, Rafael EspĂndola <
> rafael.espindola at gmail.com> wrote:
>
>> Sorry, I attached an older version of the patch. This one has a
>> slightly simpler test.
>>
>> On 20 January 2015 at 10:29, Rafael EspĂndola
>> <rafael.espindola at gmail.com> wrote:
>> > Currently clang will produce a @foo when given
>> >
>> > int foo;
>> > extern int foo __asm__("bar");
>> >
>> > The attached patch makes it produce a @bar, which is what gcc produces.
>> >
>> > I am confused by the output changes in the microsoft abi tests.
>> > Hopefully someone more familiar with it can comment on why using a
>> > more recent decl causes problems and has an idea of what should be
>> > changed to accommodate it.
>> >
>> > Cheers,
>> > Rafael
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150120/8b72d070/attachment.html>
More information about the cfe-commits
mailing list