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

            Bug ID: 62144
           Summary: "Frame pointer required, but reserved" error with
                    -fomit-frame-pointer but only with -m32 -O2
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: inline-asm
          Assignee: unassigned at gcc dot gnu.org
          Reporter: brooks at gcc dot gnu.org

Created attachment 33328
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33328&action=edit
(Example program)

The following error is unexpected.  We use -fomit-frame-pointer to allow us to
reserve a register, but apparently it is required anyway -- but only when
optimization is turned to -O2 and when compiled at -m32.

$ cat t.i
register int x0 asm ("bp");
static char x1[4096];
int strlen (char *);
void x2 ();
void
x3 ()
{
    switch (0)
    case 0:
    x2 (0);
    int x4 = strlen (x1);
    if (x1[x4] == '\n')
        x2 ();
}
$ gcc-archive/trunk/213772/bin/gcc -c t.i -m32 -fomit-frame-pointer
$ gcc-archive/trunk/213772/bin/gcc -c t.i -O1 -m32 -fomit-frame-pointer
$ gcc-archive/trunk/213772/bin/gcc -c t.i -O2 -m32 -fomit-frame-pointer
t.i: In function ‘x3’:
t.i:6:1: error: frame pointer required, but reserved
 x3 ()
 ^
t.i:1:14: note: for ‘x0’
 register int x0 asm ("bp");
              ^
$


Although the examples above use trunk, this also occurs with the 4.9 branch at
the same revision.

Reply via email to