diff options
author | Joseph Myers <joseph@codesourcery.com> | 2011-08-18 22:35:42 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2011-08-18 22:35:42 +0100 |
commit | bbceee64bef15b92b1f9b964b8d371bd07ea794a (patch) | |
tree | 7cac89ed01db35f3172a81cb7429efeb4d9798e7 /gcc/c-parser.c | |
parent | 32fe396e05443a67367a3c454b7c6d574ea7e58e (diff) | |
download | gcc-bbceee64bef15b92b1f9b964b8d371bd07ea794a.zip gcc-bbceee64bef15b92b1f9b964b8d371bd07ea794a.tar.gz gcc-bbceee64bef15b92b1f9b964b8d371bd07ea794a.tar.bz2 |
c-decl.c (shadow_tag_warned): Check for _Noreturn.
* c-decl.c (shadow_tag_warned): Check for _Noreturn.
(quals_from_declspecs): Assert _Noreturn not present.
(grokdeclarator): Handle _Noreturn.
(build_null_declspecs): Initialize noreturn_p.
(declspecs_add_scspec): Handle RID_NORETURN.
* c-parser.c (c_token_starts_declspecs, c_parser_declspecs)
(c_parser_attributes): Handle RID_NORETURN.
* c-tree.h (struct c_declspecs): Add noreturn_p.
* ginclude/stdnoreturn.h: New.
* Makefile.in (USER_H): Add stdnoreturn.h.
c-family:
* c-common.c (c_common_reswords): Add _Noreturn.
(keyword_is_function_specifier): Handle RID_NORETURN.
* c-common.h (RID_NORETURN): New.
testsuite:
* gcc.dg/c1x-noreturn-1.c, gcc.dg/c1x-noreturn-2.c,
gcc.dg/c1x-noreturn-3.c, gcc.dg/c1x-noreturn-4.c,
gcc.dg/c1x-noreturn-5.c: New tests.
From-SVN: r177881
Diffstat (limited to 'gcc/c-parser.c')
-rw-r--r-- | gcc/c-parser.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 0d2a1b7..d0f8fba 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -621,6 +621,7 @@ c_token_starts_declspecs (c_token *token) case RID_REGISTER: case RID_TYPEDEF: case RID_INLINE: + case RID_NORETURN: case RID_AUTO: case RID_THREAD: case RID_UNSIGNED: @@ -2080,12 +2081,13 @@ c_parser_declspecs (c_parser *parser, struct c_declspecs *specs, case RID_REGISTER: case RID_TYPEDEF: case RID_INLINE: + case RID_NORETURN: case RID_AUTO: case RID_THREAD: if (!scspec_ok) goto out; attrs_ok = true; - /* TODO: Distinguish between function specifiers (inline) + /* TODO: Distinguish between function specifiers (inline, noreturn) and storage class specifiers, either here or in declspecs_add_scspec. */ declspecs_add_scspec (specs, c_parser_peek_token (parser)->value); @@ -3428,6 +3430,7 @@ c_parser_attributes (c_parser *parser) case RID_TYPEDEF: case RID_SHORT: case RID_INLINE: + case RID_NORETURN: case RID_VOLATILE: case RID_SIGNED: case RID_AUTO: |