[cfe-commits] r105606 - in /cfe/trunk: lib/CodeGen/Mangle.cpp test/CodeGenCXX/mangle-unnamed.cpp
Douglas Gregor
dgregor at apple.com
Tue Jun 8 08:00:33 PDT 2010
On Jun 8, 2010, at 7:59 AM, Anders Carlsson wrote:
>
> 8 jun 2010 kl. 07.53 skrev Douglas Gregor:
>
>>
>> On Jun 8, 2010, at 7:49 AM, Anders Carlsson wrote:
>>
>>> Author: andersca
>>> Date: Tue Jun 8 09:49:03 2010
>>> New Revision: 105606
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=105606&view=rev
>>> Log:
>>> Correctly mangle static variables of anonymous struct/union type.
>>>
>>> Modified:
>>> cfe/trunk/lib/CodeGen/Mangle.cpp
>>> cfe/trunk/test/CodeGenCXX/mangle-unnamed.cpp
>>>
>>> Modified: cfe/trunk/lib/CodeGen/Mangle.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/Mangle.cpp?rev=105606&r1=105605&r2=105606&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/CodeGen/Mangle.cpp (original)
>>> +++ cfe/trunk/lib/CodeGen/Mangle.cpp Tue Jun 8 09:49:03 2010
>>> @@ -598,6 +598,28 @@
>>> mangleUnqualifiedName(0, Name, KnownArity);
>>> }
>>>
>>> +static const FieldDecl *FindFirstNamedDataMember(const RecordDecl *RD) {
>>> + assert(RD->isAnonymousStructOrUnion() &&
>>> + "Expected anonymous struct or union!");
>>> +
>>> + for (RecordDecl::field_iterator I = RD->field_begin(), E = RD->field_end();
>>> + I != E; ++I) {
>>> + const FieldDecl *FD = *I;
>>> +
>>> + if (FD->getIdentifier())
>>> + return FD;
>>> +
>>> + if (const RecordType *RT = FD->getType()->getAs<RecordType>()) {
>>> + if (const FieldDecl *NamedDataMember =
>>> + FindFirstNamedDataMember(RT->getDecl()))
>>> + return NamedDataMember;
>>> + }
>>> + }
>>> +
>>> + // We didn't find a named data member.
>>> + return 0;
>>> +}
>>> +
>>> void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND,
>>> DeclarationName Name,
>>> unsigned KnownArity) {
>>> @@ -630,6 +652,28 @@
>>> }
>>> }
>>>
>>> + if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) {
>>> + // We must have an anonymous union or struct declaration.
>>> + const RecordDecl *RD =
>>> + cast<RecordDecl>(VD->getType()->getAs<RecordType>()->getDecl());
>>
>> Should you
>>
>> assert(RD->isAnonymousStructOrUnion());
>>
>
> I already do that in FindFirstNamedDataMember. Would you like me to add another assert?
You know, I completely missed that. No need to add a second assert!
- Doug
More information about the cfe-commits
mailing list