r220221 - PR21312: Fix a regression in non-type template parameters of function type that are static member functions.

Yaron Keren yaron.keren at gmail.com
Mon Oct 20 13:19:41 PDT 2014


Thanks!

Small nitpick, the line "V = CGM.getCXXABI().EmitMemberPointer(MD);" has
two extra spaces.

Yaron


2014-10-20 21:56 GMT+03:00 David Blaikie <dblaikie at gmail.com>:

> Author: dblaikie
> Date: Mon Oct 20 13:56:54 2014
> New Revision: 220221
>
> URL: http://llvm.org/viewvc/llvm-project?rev=220221&view=rev
> Log:
> PR21312: Fix a regression in non-type template parameters of function type
> that are static member functions.
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/test/CodeGenCXX/debug-info-template.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=220221&r1=220220&r2=220221&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Oct 20 13:56:54 2014
> @@ -1258,14 +1258,15 @@ CollectTemplateParams(const TemplatePara
>        QualType T =
> TA.getParamTypeForDecl().getDesugaredType(CGM.getContext());
>        llvm::DIType TTy = getOrCreateType(T, Unit);
>        llvm::Value *V = nullptr;
> +      const CXXMethodDecl *MD;
>        // Variable pointer template parameters have a value that is the
> address
>        // of the variable.
>        if (const auto *VD = dyn_cast<VarDecl>(D))
>          V = CGM.GetAddrOfGlobalVar(VD);
>        // Member function pointers have special support for building them,
> though
>        // this is currently unsupported in LLVM CodeGen.
> -      else if (const auto *method = dyn_cast<CXXMethodDecl>(D))
> -          V = CGM.getCXXABI().EmitMemberPointer(method);
> +      else if ((MD = dyn_cast<CXXMethodDecl>(D)) && MD->isInstance())
> +          V = CGM.getCXXABI().EmitMemberPointer(MD);
>        else if (const auto *FD = dyn_cast<FunctionDecl>(D))
>          V = CGM.GetAddrOfFunction(FD);
>        // Member data pointers have special handling too to compute the
> fixed
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-template.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template.cpp?rev=220221&r1=220220&r2=220221&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/debug-info-template.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-template.cpp Mon Oct 20 13:56:54
> 2014
> @@ -5,7 +5,7 @@
>  // CHECK: [[RETAIN]] = metadata !{metadata !{{[0-9]]*}}, metadata
> [[FOO:![0-9]*]],
>
>
> -// CHECK: [[TC:![0-9]*]] = {{.*}}, metadata [[TCARGS:![0-9]*]], metadata
> !"{{.*}}"} ; [ DW_TAG_structure_type ] [TC<unsigned int, 2, &glb, &foo::e,
> &foo::f, &func, 1, 2, 3>]
> +// CHECK: [[TC:![0-9]*]] = {{.*}}, metadata [[TCARGS:![0-9]*]], metadata
> !"{{.*}}"} ; [ DW_TAG_structure_type ] [TC<unsigned int, 2, &glb, &foo::e,
> &foo::f, &foo::g, 1, 2, 3>]
>  // CHECK: [[TCARGS]] = metadata !{metadata [[TCARG1:![0-9]*]], metadata
> [[TCARG2:![0-9]*]], metadata [[TCARG3:![0-9]*]], metadata
> [[TCARG4:![0-9]*]], metadata [[TCARG5:![0-9]*]], metadata
> [[TCARG6:![0-9]*]], metadata [[TCARG7:![0-9]*]]}
>  //
>  // We seem to be missing file/line/col info on template value parameters -
> @@ -32,7 +32,7 @@
>  // CHECK: [[FARGS]] = metadata !{null, metadata [[FARG1:![0-9]*]]}
>  // CHECK: [[FARG1]] = {{.*}} ; [ DW_TAG_pointer_type ] [line 0, size 64,
> align 64, offset 0] [artificial] [from _ZTS3foo]
>  //
> -// CHECK: [[TCARG6]] = metadata !{metadata !"0x30\00f\00{{.*}}",
> {{[^,]+}}, metadata [[FUNPTR:![0-9]*]], void ()* @_Z4funcv, {{.*}} ; [
> DW_TAG_template_value_parameter ]
> +// CHECK: [[TCARG6]] = metadata !{metadata !"0x30\00f\00{{.*}}",
> {{[^,]+}}, metadata [[FUNPTR:![0-9]*]], void ()* @_ZN3foo1gEv, {{.*}} ; [
> DW_TAG_template_value_parameter ]
>  // CHECK: [[FUNPTR]] = {{.*}}, metadata [[FUNTYPE:![0-9]*]]} ; [
> DW_TAG_pointer_type ]
>  // CHECK: [[FUNTYPE]] = {{.*}}, metadata [[FUNARGS:![0-9]*]], null, null,
> null} ; [ DW_TAG_subroutine_type ]
>  // CHECK: [[FUNARGS]] = metadata !{null}
> @@ -49,7 +49,7 @@
>  // CHECK: metadata !"0x2e\00f\00f\00_ZN3foo1fEv\00{{.*}}", metadata
> [[FTYPE:![0-9]*]], {{.*}} ; [ DW_TAG_subprogram ]
>  //
>
> -// CHECK: metadata !{metadata !"0x13\00{{.*}}", metadata !{{[0-9]*}},
> metadata
> !"_ZTS2TCIjLj2EXadL_Z3glbEEXadL_ZN3foo1eEEEXadL_ZNS0_1fEvEEXadL_Z4funcvEEJLi1ELi2ELi3EEE",
> {{.*}}, metadata !"[[TCNESTED:.*]]"} ; [ DW_TAG_structure_type ] [nested]
> +// CHECK: metadata !{metadata !"0x13\00{{.*}}", metadata !{{[0-9]*}},
> metadata
> !"_ZTS2TCIjLj2EXadL_Z3glbEEXadL_ZN3foo1eEEEXadL_ZNS0_1fEvEEXadL_ZNS0_1gEvEEJLi1ELi2ELi3EEE",
> {{.*}}, metadata !"[[TCNESTED:.*]]"} ; [ DW_TAG_structure_type ] [nested]
>  // CHECK: metadata [[TCNARGS:![0-9]*]], metadata !"[[TCNT:.*]]"} ; [
> DW_TAG_structure_type ] [TC<int, -3, nullptr, nullptr, nullptr, nullptr>]
>  // CHECK: [[TCNARGS]] = metadata !{metadata [[TCNARG1:![0-9]*]], metadata
> [[TCNARG2:![0-9]*]], metadata [[TCNARG3:![0-9]*]], metadata
> [[TCNARG4:![0-9]*]], metadata [[TCNARG5:![0-9]*]], metadata
> [[TCNARG6:![0-9]*]], metadata [[TCNARG7:![0-9]*]]}
>  // CHECK: [[TCNARG1]] = metadata !{metadata !"0x2f\00T\000\000", null,
> metadata [[INT]], null} ; [ DW_TAG_template_type_parameter ]
> @@ -86,7 +86,7 @@
>  // CHECK: [[PTOARG1]] = metadata !{metadata !"0x30\00\000\000", null,
> metadata [[CONST_PADDINGATEND_PTR:![0-9]*]], %struct.PaddingAtEnd*
> @PaddedObj, null} ; [ DW_TAG_template_value_parameter ]
>  // CHECK: [[CONST_PADDINGATEND_PTR]] = {{.*}} ; [ DW_TAG_pointer_type ]
> [line 0, size 64, align 64, offset 0] [from _ZTS12PaddingAtEnd]
>
> -// CHECK: metadata !"[[TCNESTED]]", %"struct.TC<unsigned int, 2, &glb,
> &foo::e, &foo::f, &func, 1, 2, 3>::nested"* @tci, null} ; [ DW_TAG_variable
> ] [tci]
> +// CHECK: metadata !"[[TCNESTED]]", %"struct.TC<unsigned int, 2, &glb,
> &foo::e, &foo::f, &foo::g, 1, 2, 3>::nested"* @tci, null} ; [
> DW_TAG_variable ] [tci]
>
>  // CHECK: metadata !"[[TCNT]]", %struct.TC* @tcn, null} ; [
> DW_TAG_variable ] [tcn]
>
> @@ -95,6 +95,7 @@ struct foo {
>    char pad[8]; // make the member pointer to 'e' a bit more interesting
> (nonzero)
>    int e;
>    void f();
> +  static void g();
>  };
>
>  typedef int foo::*foo_mem;
> @@ -108,7 +109,7 @@ struct TC {
>  int glb;
>  void func();
>
> -TC<unsigned, 2, &glb, &foo::e, &foo::f, &func, 1, 2, 3>::nested tci;
> +TC<unsigned, 2, &glb, &foo::e, &foo::f, &foo::g, 1, 2, 3>::nested tci;
>  TC<int, -3, nullptr, nullptr, nullptr, nullptr> tcn;
>
>  template<typename>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141020/82e636f7/attachment.html>


More information about the cfe-commits mailing list