Thanks!
On 2 September 2015 at 11:50, David Majnemer via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: majnemer > Date: Wed Sep 2 10:50:38 2015 > New Revision: 246659 > > URL: http://llvm.org/viewvc/llvm-project?rev=246659&view=rev > Log: > [MS ABI] Number unnamed TagDecls which aren't externally visible > > TagDecls (structs, enums, etc.) may have the same name for linkage > purposes of one another; to disambiguate, we add a number to the mangled > named. However, we didn't do this if the TagDecl has a pseudo-name for > linkage purposes (it was defined alongside a DeclaratorDecl or a > TypeNameDecl). > > This fixes PR24651. > > Modified: > cfe/trunk/lib/AST/MicrosoftMangle.cpp > cfe/trunk/test/CodeGenCXX/mangle-ms-cxx11.cpp > > Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=246659&r1=246658&r2=246659&view=diff > ============================================================================== > --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) > +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Wed Sep 2 10:50:38 2015 > @@ -180,7 +180,9 @@ public: > > // Anonymous tags are already numbered. > if (const TagDecl *Tag = dyn_cast<TagDecl>(ND)) { > - if (Tag->getName().empty() && !Tag->getTypedefNameForAnonDecl()) > + if (!Tag->hasNameForLinkage() && > + !getASTContext().getDeclaratorForUnnamedTagDecl(Tag) && > + !getASTContext().getTypedefNameForUnnamedTagDecl(Tag)) > return false; > } > > > Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-cxx11.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-cxx11.cpp?rev=246659&r1=246658&r2=246659&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/mangle-ms-cxx11.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/mangle-ms-cxx11.cpp Wed Sep 2 10:50:38 2015 > @@ -261,3 +261,19 @@ struct B { > void f(decltype(B<int>::e)) {} > // CHECK-DAG: @"\01?f@UnnamedType@@YAXPAW4<unnamed-type-e>@?$B@H@1@@Z > } > + > +namespace PR24651 { > +template <typename T> > +void f(T) {} > + > +void g() { > + enum {} E; > + f(E); > + { > + enum {} E; > + f(E); > + } > +} > +// CHECK-DAG: > @"\01??$f@W4<unnamed-type-E>@?1??g@PR24651@@YAXXZ@@PR24651@@YAXW4<unnamed-type-E>@?1??g@0@YAXXZ@@Z" > +// CHECK-DAG: > @"\01??$f@W4<unnamed-type-E>@?2??g@PR24651@@YAXXZ@@PR24651@@YAXW4<unnamed-type-E>@?2??g@0@YAXXZ@@Z" > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits