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:
parent
0127c169d1
commit
f50592234c
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, \
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue