/* { dg-do compile } */
/* Check that the foo interrupt vectors aren't actually removed.  */
/* { dg-final { scan-assembler-times "__interrupt_vector_foo" 2 } } */
/* Check that the out-of-range interrupt vectors aren't actually removed.  */
/* { dg-final { scan-assembler "__interrupt_vector_65" } } */
/* { dg-final { scan-assembler "__interrupt_vector_100" } } */

/* Check that warnings are emitted when attributes are used incorrectly and
   that attributes are interpreted correctly whether leading and trailing
   underscores are used or not.  */

void __attribute__((__naked__,__reentrant__))
fn1(void)
{ /* { dg-warning "ignoring attribute 'reentrant' because it conflicts with attribute 'naked'" } */
}

void __attribute__((naked,reentrant))
fn2(void)
{ /* { dg-warning "ignoring attribute 'reentrant' because it conflicts with attribute 'naked'" } */
}

void __attribute__((__reentrant__,__naked__))
fn3(void)
{ /* { dg-warning "ignoring attribute 'naked' because it conflicts with attribute 'reentrant'" } */
}

void __attribute__((reentrant,naked))
fn4(void)
{ /* { dg-warning "ignoring attribute 'naked' because it conflicts with attribute 'reentrant'" } */
}

void __attribute__((__critical__,__reentrant__))
fn5(void)
{ /* { dg-warning "ignoring attribute 'reentrant' because it conflicts with attribute 'critical'" } */
}

void __attribute__((critical,reentrant))
fn6(void)
{ /* { dg-warning "ignoring attribute 'reentrant' because it conflicts with attribute 'critical'" } */
}

void __attribute__((__reentrant__,__critical__))
fn7(void)
{ /* { dg-warning "ignoring attribute 'critical' because it conflicts with attribute 'reentrant'" } */
}

void __attribute__((reentrant,critical))
fn8(void)
{ /* { dg-warning "ignoring attribute 'critical' because it conflicts with attribute 'reentrant'" } */
}

void __attribute__((__critical__,__naked__))
fn9(void)
{ /* { dg-warning "ignoring attribute 'naked' because it conflicts with attribute 'critical'" } */
}

void __attribute__((critical,naked))
fn10(void)
{ /* { dg-warning "ignoring attribute 'naked' because it conflicts with attribute 'critical'" } */
}

void __attribute__((__naked__,__critical__))
fn11(void)
{ /* { dg-warning "ignoring attribute 'critical' because it conflicts with attribute 'naked'" } */
}

void __attribute__((naked,critical))
fn12(void)
{ /* { dg-warning "ignoring attribute 'critical' because it conflicts with attribute 'naked'" } */
}

int __attribute__((interrupt))
isr1 (void)
{ /* { dg-warning "interrupt handlers must be void" } */
}

int __attribute__((__interrupt__))
isr2 (void)
{ /* { dg-warning "interrupt handlers must be void" } */
}

void __attribute__((interrupt("foo1")))
isr3 (void)
{ /* { dg-warning "unrecognized interrupt vector argument" } */
}

void __attribute__((__interrupt__("foo2")))
isr4 (void)
{ /* { dg-warning "unrecognized.*interrupt vector argument" } */
}

void __attribute__((interrupt(65)))
isr5 (void)
{ /* { dg-warning "numeric argument of 'interrupt' attribute must be in range 0..63" } */
}

void __attribute__((__interrupt__(100)))
isr6 (void)
{ /* { dg-warning "numeric argument of 'interrupt' attribute must be in range 0..63" } */
}

void __attribute__((interrupt(0.5)))
isr7 (void)
{ /* { dg-warning "argument of 'interrupt' attribute is not a string constant or number" } */
  volatile int __attribute__((__naked__))
    a; /* { dg-warning "'naked' attribute only applies to functions" } */
}

void __attribute__((__interrupt__(1.5)))
isr8 (void)
{ /* { dg-warning "argument of 'interrupt' attribute is not a string constant or number" } */
  volatile int __attribute__((naked))
    a; /* { dg-warning "'naked' attribute only applies to functions" } */
}
