mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 08:10:27 +08:00
DWARF add DW_AT_noreturn on noreturn function subprogram.
This implements the DWARFv5 noreturn proposal: http://dwarfstd.org/ShowIssue.php?issue=140331.1 TREE_THIS_VOLATILE on a FUNCTION_DECL node means the function does not return normally. This catches the traditional noreturn GNU attribute, the C11 _Noreturn keyword and the C++11 [[noreturn]] attribute. This relies on the DW_AT_noreturn constant defined in the DWARFv5 DRAFT: http://www.dwarfstd.org/doc/dwarf5.20141029.pdf gcc/ChangeLog * dwarf2out.c (gen_subprogram_die): Add DW_AT_noreturn when the function decl has TREE_THIS_VOLATILE. gcc/testsuite/ChangeLog * g++.dg/debug/dwarf2/noreturn-function.C: New test. * gcc.dg/debug/dwarf2/noreturn-function-attribute.c: Likewise. * gcc.dg/debug/dwarf2/noreturn-function-keyword.c: Likewise. include/ChangeLog * dwarf2.def (DW_AT_noreturn): New DWARF5 attribute. From-SVN: r218075
This commit is contained in:
parent
7ec44c3d10
commit
42bc352001
@ -1,3 +1,8 @@
|
||||
2014-11-25 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* dwarf2out.c (gen_subprogram_die): Add DW_AT_noreturn when the
|
||||
function decl has TREE_THIS_VOLATILE.
|
||||
|
||||
2014-11-26 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/62238
|
||||
|
@ -18336,6 +18336,9 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
|
||||
if (DECL_ARTIFICIAL (decl))
|
||||
add_AT_flag (subr_die, DW_AT_artificial, 1);
|
||||
|
||||
if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict))
|
||||
add_AT_flag (subr_die, DW_AT_noreturn, 1);
|
||||
|
||||
add_accessibility_attribute (subr_die, decl);
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2014-11-24 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* g++.dg/debug/dwarf2/noreturn-function.C: New test.
|
||||
* gcc.dg/debug/dwarf2/noreturn-function-attribute.c: Likewise.
|
||||
* gcc.dg/debug/dwarf2/noreturn-function-keyword.c: Likewise.
|
||||
|
||||
2014-11-26 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/62238
|
||||
|
16
gcc/testsuite/g++.dg/debug/dwarf2/noreturn-function.C
Normal file
16
gcc/testsuite/g++.dg/debug/dwarf2/noreturn-function.C
Normal file
@ -0,0 +1,16 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O -std=c++11 -g -dA -gno-strict-dwarf" }
|
||||
// Expect DW_AT_noreturn once in .debug_info and once in .debug_abbrev
|
||||
// { dg-final { scan-assembler-times "DW_AT_noreturn" 2 } }
|
||||
|
||||
class Foo
|
||||
{
|
||||
int i;
|
||||
void bar [[noreturn]] (int j);
|
||||
};
|
||||
|
||||
void
|
||||
Foo::bar (int j)
|
||||
{
|
||||
while (1) { ; }
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O -std=c99 -g -dA -gno-strict-dwarf" }
|
||||
// Expect DW_AT_noreturn once in .debug_info and once in .debug_abbrev
|
||||
// { dg-final { scan-assembler-times "DW_AT_noreturn" 2 } }
|
||||
|
||||
void __attribute__ ((noreturn))
|
||||
baz (void)
|
||||
{
|
||||
while (1) { ; }
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O -std=c11 -g -dA -gno-strict-dwarf" }
|
||||
// Expect DW_AT_noreturn once in .debug_info and once in .debug_abbrev
|
||||
// { dg-final { scan-assembler-times "DW_AT_noreturn" 2 } }
|
||||
|
||||
_Noreturn void exit (int);
|
||||
|
||||
void exit (int i)
|
||||
{
|
||||
while (i < 0 || i == 0 || i > 0)
|
||||
;
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-11-25 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* dwarf2.def (DW_AT_noreturn): New DWARF5 attribute.
|
||||
|
||||
2014-11-14 Shinichiro Hamaji <shinichiro.hamaji@gmail.com>
|
||||
|
||||
* dwarf2.def (DW_AT_APPLE_optimized, DW_AT_APPLE_flags)
|
||||
|
@ -308,6 +308,8 @@ DW_AT (DW_AT_data_bit_offset, 0x6b)
|
||||
DW_AT (DW_AT_const_expr, 0x6c)
|
||||
DW_AT (DW_AT_enum_class, 0x6d)
|
||||
DW_AT (DW_AT_linkage_name, 0x6e)
|
||||
/* DWARF 5. */
|
||||
DW_AT (DW_AT_noreturn, 0x87)
|
||||
|
||||
DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start. */
|
||||
DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user