diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2016-03-23 14:22:33 +0100 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2016-03-23 14:22:33 +0100 |
commit | 4e62a2c4b2c809ea020423e7e328ba96e379d64d (patch) | |
tree | 67a9325ae6e04c3ed353e9cd1f9dc19c1fd87405 /cparser/Cutil.ml | |
parent | ccd59f7fc19ffe2347724b532d6ce13c8580c2ab (diff) | |
download | compcert-kvx-4e62a2c4b2c809ea020423e7e328ba96e379d64d.tar.gz compcert-kvx-4e62a2c4b2c809ea020423e7e328ba96e379d64d.zip |
Added the _Noreturn keyword.
CompCert now recognizes the C11 _Noreturn function specifier and
emits a simple warning for functions declared _Noreturn containing
a return statement. Also the stdnoreturn header and additionally
the stdalign header are added.
Bug 18541
Diffstat (limited to 'cparser/Cutil.ml')
-rw-r--r-- | cparser/Cutil.ml | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/cparser/Cutil.ml b/cparser/Cutil.ml index 1bbb8e98..4b4e1b81 100644 --- a/cparser/Cutil.ml +++ b/cparser/Cutil.ml @@ -1118,3 +1118,24 @@ let rec subst_stmt phi s = List.map subst_asm_operand inputs, clob) } + +let contains_return s = + let rec aux s = + match s.sdesc with + | Sskip + | Sbreak + | Scontinue + | Sdo _ + | Sdecl _ + | Sasm _ + | Sgoto _ -> false + | Sif(_, s1, s2) + | Sseq(s1, s2) -> aux s1 || aux s2 + | Sswitch (_, s) + | Slabeled (_, s) + | Swhile (_, s) + | Sdowhile(s, _ ) -> aux s + | Sfor(s1, _ , s2, s3) -> aux s1 || aux s2 || aux s3 + | Sreturn _ -> true + | Sblock sl -> List.fold_left (fun acc s -> acc || aux s) false sl in + aux s |