/*
 * gcc401bug.c
 * Written by Mikael Pettersson, [EMAIL PROTECTED], 2005-06-24.
 * Adapted from linux-2.6.12/drivers/serial/8250.c.
 *
 * gcc-4.0-20050623 bootstrapped on i686-pc-linux-gnu
 * gets an ICE when compiling this program at -O2:
 *
 * gcc401bug.c: In function 'serial8250_isa_init_ports':
 * gcc401bug.c:30: internal compiler error: Segmentation fault
 *
 * Notes:
 * - gcc-4.0.1-20050616 does not have this bug.
 * - Using -O1 prevents the ICE.
 */

static unsigned int old_serial_port_irq[10];

static struct uart_8250_port {
    volatile unsigned int slock;
    unsigned int irq;
} serial8250_ports[10];

static __inline__ __attribute__((always_inline)) int irq_canonicalize(int irq)
{
    return ((irq == 2) ? 9 : irq);
}

void serial8250_isa_init_ports(void)
{
    struct uart_8250_port *up;
    int i;

    for (i = 0, up = serial8250_ports; i < 10; i++, up++)
        up->irq = irq_canonicalize(old_serial_port_irq[i]);
}

int main(void)
{
    serial8250_isa_init_ports();
    return 0;
}

-- 
           Summary: gcc-4.0-20050623 internal compiler error in
                    linux/drivers/serial/8250.c
           Product: gcc
           Version: 4.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: regression
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mikpe at csd dot uu dot se
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22171

Reply via email to