From 6dbb0022638646e5828479c717f04ea407ef1d8b Mon Sep 17 00:00:00 2001
From: Andre Maroneze <andre.oliveiramaroneze@cea.fr>
Date: Fri, 15 May 2020 12:18:19 +0200
Subject: [PATCH] [Parsing] accept C11 function specifier _Noreturn

---
 src/kernel_internals/parsing/clexer.mll  | 1 +
 src/kernel_internals/parsing/cparser.mly | 3 ++-
 tests/syntax/built.i                     | 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/kernel_internals/parsing/clexer.mll b/src/kernel_internals/parsing/clexer.mll
index 5d83bbc63c4..b97fdcbfa11 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 6f2547db91f..d58c42823f1 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 28f1ee5b7dc..61f23ea3387 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);
 
-- 
GitLab