[cfe-commits] r105606 - in /cfe/trunk: lib/CodeGen/Mangle.cpp test/CodeGenCXX/mangle-unnamed.cpp
Douglas Gregor
dgregor at apple.com
Tue Jun 8 07:53:54 PDT 2010
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());
?
- Doug
More information about the cfe-commits
mailing list