r246659 - [MS ABI] Number unnamed TagDecls which aren't externally visible

Rafael EspĂ­ndola via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 2 09:03:00 PDT 2015


Thanks!

On 2 September 2015 at 11:50, David Majnemer via cfe-commits
<cfe-commits at 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 at UnnamedType@@YAXPAW4<unnamed-type-e>@?$B at 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 at W4<unnamed-type-E>@?1??g at PR24651@@YAXXZ@@PR24651@@YAXW4<unnamed-type-E>@?1??g at 0@YAXXZ@@Z"
> +// CHECK-DAG: @"\01??$f at W4<unnamed-type-E>@?2??g at PR24651@@YAXXZ@@PR24651@@YAXW4<unnamed-type-E>@?2??g at 0@YAXXZ@@Z"
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list