Commit 60084552 by Jozef Lawrynowicz

msp430.c (msp430_attr): Warn when the critical and interrupt function attributes are used together.

2018-12-29  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	gcc/ChangeLog:

	* config/msp430/msp430.c (msp430_attr): Warn when the critical and
	interrupt function attributes are used together.
	* gcc/doc/extend.texi: Update documentation on the critical attribute.

	gcc/testsuite/ChangeLog:

	* gcc.target/msp430/critical-interrupt.c: New test.

From-SVN: r267467
parent 74ee24e2
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.c (msp430_attr): Warn when the critical and
interrupt function attributes are used together.
* gcc/doc/extend.texi: Update documentation on the critical attribute.
2018-12-29 John David Anglin <danglin@gcc.gnu.org> 2018-12-29 John David Anglin <danglin@gcc.gnu.org>
* config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define * config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define
d_target_objs. d_target_objs.
(hppa*-*-openbsd*): Likewise. (hppa*-*-openbsd*): Likewise.
(hppa[12]*-*-hpux10*): Likewise. (hppa[12]*-*-hpux10*): Likewise.
(hppa*64*-*-hpux11*): Likewise. (hppa*64*-*-hpux11*): Likewise.
...@@ -1946,6 +1946,13 @@ msp430_attr (tree * node, ...@@ -1946,6 +1946,13 @@ msp430_attr (tree * node,
TREE_USED (* node) = 1; TREE_USED (* node) = 1;
DECL_PRESERVE_P (* node) = 1; DECL_PRESERVE_P (* node) = 1;
} }
if (is_critical_func (* node))
{
warning (OPT_Wattributes,
"critical attribute has no effect on interrupt functions");
DECL_ATTRIBUTES (*node) = remove_attribute (ATTR_CRIT,
DECL_ATTRIBUTES (* node));
}
} }
else if (TREE_NAME_EQ (name, ATTR_REENT)) else if (TREE_NAME_EQ (name, ATTR_REENT))
{ {
...@@ -1960,6 +1967,8 @@ msp430_attr (tree * node, ...@@ -1960,6 +1967,8 @@ msp430_attr (tree * node,
message = "naked functions cannot be critical"; message = "naked functions cannot be critical";
else if (is_reentrant_func (* node)) else if (is_reentrant_func (* node))
message = "reentrant functions cannot be critical"; message = "reentrant functions cannot be critical";
else if (is_interrupt_func ( *node))
message = "critical attribute has no effect on interrupt functions";
} }
else if (TREE_NAME_EQ (name, ATTR_NAKED)) else if (TREE_NAME_EQ (name, ATTR_NAKED))
{ {
......
...@@ -4978,8 +4978,12 @@ These function attributes are supported by the MSP430 back end: ...@@ -4978,8 +4978,12 @@ These function attributes are supported by the MSP430 back end:
@cindex @code{critical} function attribute, MSP430 @cindex @code{critical} function attribute, MSP430
Critical functions disable interrupts upon entry and restore the Critical functions disable interrupts upon entry and restore the
previous interrupt state upon exit. Critical functions cannot also previous interrupt state upon exit. Critical functions cannot also
have the @code{naked} or @code{reentrant} attributes. They can have have the @code{naked}, @code{reentrant} or @code{interrupt} attributes.
the @code{interrupt} attribute.
The MSP430 hardware ensures that interrupts are disabled on entry to
@code{interrupt} functions, and restores the previous interrupt state
on exit. The @code{critical} attribute is therefore redundant on
@code{interrupt} functions.
@item interrupt @item interrupt
@cindex @code{interrupt} function attribute, MSP430 @cindex @code{interrupt} function attribute, MSP430
......
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* gcc.target/msp430/critical-interrupt.c: New test.
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org> 2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88342 PR fortran/88342
......
/* { dg-do compile } */
/* { dg-final { scan-assembler-not "attributes.*critical" } } */
void __attribute__((interrupt,critical))
fn1 (void)
{ /* { dg-warning "critical attribute has no effect on interrupt functions" } */
}
void __attribute__((critical,interrupt))
fn2 (void)
{ /* { dg-warning "critical attribute has no effect on interrupt functions" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment