From 3a1b0e98a09dd9688e8f45f9677b7ea25f4720bf Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 21 Jul 2020 17:09:45 +0200 Subject: Support __builtin_constant_p as in GCC and Clang (#367) Returns 1 if the argument is a constant expression, 0 otherwise. Closes: #366 --- cparser/Elab.ml | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'cparser') diff --git a/cparser/Elab.ml b/cparser/Elab.ml index b74e34d0..4bd0bdfa 100644 --- a/cparser/Elab.ml +++ b/cparser/Elab.ml @@ -1809,6 +1809,16 @@ let elab_expr ctx loc env a = (print_typ env) ty (print_typ env) ty' (print_typ env) ty' (print_typ env) ty; { edesc = ECall(ident, [b2; b3]); etyp = ty },env + | CALL(VARIABLE "__builtin_constant_p", al) -> + begin match al with + | [a1] -> + let b1,env = elab env a1 in + let v = if Ceval.is_constant_expr env b1 then 1L else 0L in + intconst v IInt, env + | _ -> + fatal_error "'__builtin_constant_p' expects one argument" + end + | CALL((VARIABLE "__builtin_sel" as a0), al) -> begin match al with | [a1; a2; a3] -> -- cgit