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).