Skip generating DWARF info for dead code (#3498)
When encountering a subprogram that is dead code (as indicated by the dead code proposal https://dwarfstd.org/ShowIssue.php?issue=200609.1), don't generate debug output for the subprogram or any of its children.
This commit is contained in:
committed by
GitHub
parent
2053e972b7
commit
12bfbdfaca
19
tests/all/debug/testsuite/dead_code.c
Normal file
19
tests/all/debug/testsuite/dead_code.c
Normal file
@@ -0,0 +1,19 @@
|
||||
int bar(int a)
|
||||
{
|
||||
int b[50];
|
||||
b[0] = a;
|
||||
b[29] = a;
|
||||
return a;
|
||||
}
|
||||
|
||||
int baz(int a);
|
||||
|
||||
__attribute__((export_name("foo"))) int foo()
|
||||
{
|
||||
return baz(10);
|
||||
}
|
||||
|
||||
__attribute__((noinline)) int baz(int a)
|
||||
{
|
||||
return a + 5;
|
||||
}
|
||||
BIN
tests/all/debug/testsuite/dead_code.wasm
Executable file
BIN
tests/all/debug/testsuite/dead_code.wasm
Executable file
Binary file not shown.
@@ -43,6 +43,30 @@ fn check_line_program(wasm_path: &str, directives: &str) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
#[cfg(all(
|
||||
any(target_os = "linux", target_os = "macos"),
|
||||
target_pointer_width = "64"
|
||||
))]
|
||||
fn test_debug_dwarf_translate_dead_code() -> Result<()> {
|
||||
check_wasm(
|
||||
"tests/all/debug/testsuite/dead_code.wasm",
|
||||
r##"
|
||||
check: DW_TAG_compile_unit
|
||||
# We don't have "bar" function because it is dead code
|
||||
not: DW_AT_name ("bar")
|
||||
# We have "foo" function
|
||||
check: DW_TAG_subprogram
|
||||
check: DW_AT_name ("foo")
|
||||
# We have "baz" function
|
||||
# it was marked `noinline` so isn't dead code
|
||||
check: DW_TAG_subprogram
|
||||
check: DW_AT_name ("baz")
|
||||
"##,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
#[cfg(all(
|
||||
|
||||
Reference in New Issue
Block a user