https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86840

            Bug ID: 86840
           Summary: __attribute__((optimize("exceptions"))) is silently
                    ignored
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Consider test.c:
...
void a (void);

void do_cleanup (void *p);

void
#ifdef E
__attribute__((optimize("exceptions")))
#endif
b (void)
{
  int c __attribute__((cleanup(do_cleanup)));
  a();
}
...


When enabling exceptions, an exception table is generated:
...
$ gcc test.c -o- -S -O2 -fexceptions | grep -c "\.gcc_except_table"
2
...

And when disabling exceptions, it's not:
...
$ gcc test.c -o- -S -O2 -fno-exceptions | grep -c "\.gcc_except_table"
0
...

When enabling exceptions using the attribute on function b, no exception table
is generated:
...
$ gcc test.c -o- -S -O2 -fno-exceptions -DE | grep -c "\.gcc_except_table"
0
...

This should have a warning "attribute ignored", and/or document this more
clearly in the documentation of fexceptions and/or the optimize attribute.

Reply via email to