aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-parser.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2011-08-18 22:35:42 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2011-08-18 22:35:42 +0100
commitbbceee64bef15b92b1f9b964b8d371bd07ea794a (patch)
tree7cac89ed01db35f3172a81cb7429efeb4d9798e7 /gcc/c-parser.c
parent32fe396e05443a67367a3c454b7c6d574ea7e58e (diff)
downloadgcc-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.c5
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: