https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113331
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |burnus at gcc dot gnu.org
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
All of the following is in except.cc.
The problem is that the count in the label is relative to 'call_site_base'.
In convert_to_eh_region_ranges, those get bumped - but the function reset it at
the end. They do get accumulated via, e.g., dw2_output_call_site_table but, in
GCN, the output_function_exception_table is exit early because of:
3229 if (!crtl->uses_eh_lsda
3230 || targetm_common.except_unwind_info (&global_options) ==
UI_NONE)
3231 return;
Thus, the next time convert_to_eh_region_ranges is called, it starts with the
very same numbers.
The reason that this gets produced is because there is an ERT_MUST_NOT_THROW
("MUST_NOT_THROW regions prevent all exceptions from propagating. This region
type is used in C++ to surround destructors being run inside a CLEANUP
region.")
As there are both "-1" (implies no action) and "-2" (MUST_NOT_THROW), GCN
produces this output. For whatever reason, nvptx has no "-1" actions in the
function, thus, after the change to "-2", there is no flip and - hence, no
output is produced - avoiding the issue.
→ I bet that both gcn and nvptx are affected (unless luck or compiled with
-fno-exceptions).