diff --git a/src/kernel_internals/parsing/clexer.mll b/src/kernel_internals/parsing/clexer.mll index 5d83bbc63c40b026f08077b505cf31ccab06d6f3..b97fdcbfa1177383e253d9f14c5f451446f00776 100644 --- a/src/kernel_internals/parsing/clexer.mll +++ b/src/kernel_internals/parsing/clexer.mll @@ -144,6 +144,7 @@ let init_lexicon _ = INLINE loc else IDENT ("_inline")); + ("_Noreturn", fun loc -> NORETURN loc); ("__attribute__", fun loc -> ATTRIBUTE loc); ("__attribute", fun loc -> ATTRIBUTE loc); ("__blockattribute__", fun _ -> BLOCKATTRIBUTE); diff --git a/src/kernel_internals/parsing/cparser.mly b/src/kernel_internals/parsing/cparser.mly index 6f2547db91ff1ebf4e193024ad1158e06428e887..d58c42823f1bd91a8345b13c5d21f2e7df3de59b 100644 --- a/src/kernel_internals/parsing/cparser.mly +++ b/src/kernel_internals/parsing/cparser.mly @@ -367,7 +367,7 @@ let in_ghost_block ?(battrs=[]) l = %token<Cabs.cabsloc> IF TRY EXCEPT FINALLY %token ELSE -%token<Cabs.cabsloc> ATTRIBUTE INLINE ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__ +%token<Cabs.cabsloc> ATTRIBUTE INLINE NORETURN ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__ %token LABEL__ %token<Cabs.cabsloc> BUILTIN_VA_ARG %token BLOCKATTRIBUTE @@ -1116,6 +1116,7 @@ decl_spec_wo_type: /* ISO 6.7 */ | REGISTER { SpecStorage REGISTER, $1} /* ISO 6.7.4 */ | INLINE { SpecInline, $1 } +| NORETURN { SpecAttr (("noreturn",[])), $1 } | cvspec { $1 } | attribute_nocv { SpecAttr (fst $1), snd $1 } ; diff --git a/tests/syntax/built.i b/tests/syntax/built.i index 28f1ee5b7dcfa6b7da378ef24face8d449f1f6b1..61f23ea3387ab0d34cb1073a42d49d07f6ae9b0f 100644 --- a/tests/syntax/built.i +++ b/tests/syntax/built.i @@ -4,7 +4,7 @@ STDOPT: +"-machdep gcc_x86_32" extern __attribute__((const, noreturn)) int ____ilog2_NaN(void); - +_Noreturn inline dummy_f(void); static inline __attribute__((no_instrument_function)) __attribute__((const)) int __ilog2_u32(int n);