diff options
author | Jozef Lawrynowicz <jozefl@gcc.gnu.org> | 2018-12-29 19:00:48 +0000 |
---|---|---|
committer | Jozef Lawrynowicz <jozefl@gcc.gnu.org> | 2018-12-29 19:00:48 +0000 |
commit | 600845521e68b5e0da136636ecf174eee8e5ee17 (patch) | |
tree | 4ef6cf8d348615502582a0545e6f652557e462c0 /gcc | |
parent | 74ee24e23e96dde8a338a140c3cadd0bb7715e61 (diff) | |
download | gcc-600845521e68b5e0da136636ecf174eee8e5ee17.zip gcc-600845521e68b5e0da136636ecf174eee8e5ee17.tar.gz gcc-600845521e68b5e0da136636ecf174eee8e5ee17.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/msp430/msp430.c | 9 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/msp430/critical-interrupt.c | 12 |
5 files changed, 39 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ce73b4..bb02095 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,13 @@ +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> - * config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define - d_target_objs. + * config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define + d_target_objs. (hppa*-*-openbsd*): Likewise. (hppa[12]*-*-hpux10*): Likewise. (hppa*64*-*-hpux11*): Likewise. diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c index 3a41cc0..21b5819 100644 --- a/gcc/config/msp430/msp430.c +++ b/gcc/config/msp430/msp430.c @@ -1946,6 +1946,13 @@ msp430_attr (tree * node, TREE_USED (* 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)) { @@ -1960,6 +1967,8 @@ msp430_attr (tree * node, message = "naked functions cannot be critical"; else if (is_reentrant_func (* node)) 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)) { diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 1849120..27724e4 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -4978,8 +4978,12 @@ These function attributes are supported by the MSP430 back end: @cindex @code{critical} function attribute, MSP430 Critical functions disable interrupts upon entry and restore the previous interrupt state upon exit. Critical functions cannot also -have the @code{naked} or @code{reentrant} attributes. They can have -the @code{interrupt} attribute. +have the @code{naked}, @code{reentrant} or @code{interrupt} attributes. + +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 @cindex @code{interrupt} function attribute, MSP430 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 109441d..cdfc940 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +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> PR fortran/88342 diff --git a/gcc/testsuite/gcc.target/msp430/critical-interrupt.c b/gcc/testsuite/gcc.target/msp430/critical-interrupt.c new file mode 100644 index 0000000..3ef7a12 --- /dev/null +++ b/gcc/testsuite/gcc.target/msp430/critical-interrupt.c @@ -0,0 +1,12 @@ +/* { 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" } */ +} |