PR debug/63239 Add DWARF representation for C++11 deleted member function.

include/ChangeLog

	* dwarf2.def (DW_AT_GNU_deleted): New attribute.

gcc/ChangeLog

	* dwarf2out.c (gen_subprogram_die): When a member function is
	explicitly deleted then add a DW_AT_GNU_deleted attribute.
	* langhooks.h (struct lang_hooks_for_decls): Add
	function_decl_deleted_p langhook.
	* langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Define.
	(LANG_HOOKS_DECLS): Add LANG_HOOKS_FUNCTION_DECL_DELETED_P.

gcc/cp/ChangeLog

	* cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Define.
	(cp_function_decl_deleted_p): New prototype.
	* cp-objcp-common.c (cp_function_deleted_p): New function.

gcc/testsuite/ChangeLog

	* g++.dg/debug/dwarf2/deleted-member-function.C: New testcase.

From-SVN: r215901
This commit is contained in:
Mark Wielaard 2014-10-05 15:25:03 +00:00 committed by Mark Wielaard
parent 0127c169d1
commit f50592234c
11 changed files with 70 additions and 0 deletions

View File

@ -1,3 +1,13 @@
2014-10-02 Mark Wielaard <mjw@redhat.com>
PR debug/63239
* dwarf2out.c (gen_subprogram_die): When a member function is
explicitly deleted then add a DW_AT_GNU_deleted attribute.
* langhooks.h (struct lang_hooks_for_decls): Add
function_decl_deleted_p langhook.
* langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Define.
(LANG_HOOKS_DECLS): Add LANG_HOOKS_FUNCTION_DECL_DELETED_P.
2014-10-04 Jan Hubicka <hubicka@ucw.cz>
* ipa-polymorphic-call.c (walk_ssa_copies): Recognize

View File

@ -1,3 +1,10 @@
2014-10-02 Mark Wielaard <mjw@redhat.com>
PR debug/63239
* cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_DELETED_P): Define.
(cp_function_decl_deleted_p): New prototype.
* cp-objcp-common.c (cp_function_deleted_p): New function.
2014-10-03 Marc Glisse <marc.glisse@inria.fr>
PR c++/54427

View File

@ -168,6 +168,16 @@ cp_function_decl_explicit_p (tree decl)
&& DECL_NONCONVERTING_P (decl));
}
/* Return true if DECL is deleted special member function. */
bool
cp_function_decl_deleted_p (tree decl)
{
return (decl
&& DECL_LANG_SPECIFIC (STRIP_TEMPLATE (decl))
&& DECL_DELETED_FN (decl));
}
/* Stubs to keep c-opts.c happy. */
void
push_file_scope (void)

View File

@ -27,6 +27,7 @@ extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
tree, bool);
extern bool cp_function_decl_explicit_p (tree decl);
extern bool cp_function_decl_deleted_p (tree decl);
extern void cp_common_init_ts (void);
/* Lang hooks that are shared between C++ and ObjC++ are defined here. Hooks
@ -131,6 +132,8 @@ extern void cp_common_init_ts (void);
#define LANG_HOOKS_GIMPLIFY_EXPR cp_gimplify_expr
#undef LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P
#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P cp_function_decl_explicit_p
#undef LANG_HOOKS_FUNCTION_DECL_DELETED_P
#define LANG_HOOKS_FUNCTION_DECL_DELETED_P cp_function_decl_deleted_p
#undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
#define LANG_HOOKS_OMP_PREDETERMINED_SHARING cxx_omp_predetermined_sharing
#undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR

View File

@ -18306,6 +18306,12 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
&& (dwarf_version >= 3 || !dwarf_strict))
add_AT_flag (subr_die, DW_AT_explicit, 1);
/* If this is a C++11 deleted special function member then generate
a DW_AT_GNU_deleted attribute. */
if (lang_hooks.decls.function_decl_deleted_p (decl)
&& (! dwarf_strict))
add_AT_flag (subr_die, DW_AT_GNU_deleted, 1);
/* The first time we see a member function, it is in the context of
the class to which it belongs. We make sure of this by emitting
the class first. The next time is the definition, which is

View File

@ -203,6 +203,7 @@ extern tree lhd_make_node (enum tree_code);
#define LANG_HOOKS_PUSHDECL pushdecl
#define LANG_HOOKS_GETDECLS getdecls
#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P hook_bool_tree_false
#define LANG_HOOKS_FUNCTION_DECL_DELETED_P hook_bool_tree_false
#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
#define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
#define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
@ -224,6 +225,7 @@ extern tree lhd_make_node (enum tree_code);
LANG_HOOKS_PUSHDECL, \
LANG_HOOKS_GETDECLS, \
LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P, \
LANG_HOOKS_FUNCTION_DECL_DELETED_P, \
LANG_HOOKS_GENERIC_GENERIC_PARAMETER_DECL_P, \
LANG_HOOKS_FUNCTION_PARM_EXPANDED_FROM_PACK_P, \
LANG_HOOKS_GET_GENERIC_FUNCTION_DECL, \

View File

@ -166,6 +166,9 @@ struct lang_hooks_for_decls
/* Returns true if DECL is explicit member function. */
bool (*function_decl_explicit_p) (tree);
/* Returns true if DECL is C++11 deleted special member function. */
bool (*function_decl_deleted_p) (tree);
/* Returns True if the parameter is a generic parameter decl
of a generic type, e.g a template template parameter for the C++ FE. */
bool (*generic_generic_parameter_decl_p) (const_tree);

View File

@ -1,3 +1,8 @@
2014-10-02 Mark Wielaard <mjw@redhat.com>
PR debug/63239
* g++.dg/debug/dwarf2/deleted-member-function.C: New testcase.
2014-10-04 Jan Hubicka <hubicka@ucw.cz>
* g++.dg/ipa/devirt-47.C: New testcase.

View File

@ -0,0 +1,17 @@
// { dg-do compile }
// { dg-options "-O -std=c++11 -g -dA" }
// { dg-final { scan-assembler-times "# DW_AT_GNU_deleted" 2 } }
struct Foo
{
Foo () {}
// Make non-copyable
Foo (const Foo&) = delete;
Foo & operator=(const Foo&) = delete;
};
void
bar ()
{
Foo foo;
}

View File

@ -1,3 +1,8 @@
2013-10-02 Mark Wielaard <mjw@redhat.com>
PR debug/63239
* dwarf2.def (DW_AT_GNU_deleted): New attribute.
2014-09-26 Max Ostapenko <m.ostapenko@partner.samsung.com>
* libiberty.h (PEX_STDOUT_APPEND): New flag.

View File

@ -383,6 +383,8 @@ DW_AT (DW_AT_GNU_all_call_sites, 0x2117)
DW_AT (DW_AT_GNU_all_source_call_sites, 0x2118)
/* Section offset into .debug_macro section. */
DW_AT (DW_AT_GNU_macros, 0x2119)
/* Attribute for C++ deleted special member functions (= delete;). */
DW_AT (DW_AT_GNU_deleted, 0x211a)
/* Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFission. */
DW_AT (DW_AT_GNU_dwo_name, 0x2130)
DW_AT (DW_AT_GNU_dwo_id, 0x2131)