From a335e621aaa85a7f73b16c121261dbecf8e68340 Mon Sep 17 00:00:00 2001 From: xleroy Date: Sat, 16 Jul 2011 16:17:08 +0000 Subject: In conditional expressions e1 ? e2 : e3, cast the results of e2 and e3 to the type of the whole conditional expression. Replaced predicates "cast", "is_true" and "is_false" by functions "sem_cast" and "bool_val". git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1684 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- cfrontend/Cshmgen.v | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'cfrontend/Cshmgen.v') diff --git a/cfrontend/Cshmgen.v b/cfrontend/Cshmgen.v index cc243163..e32001b9 100644 --- a/cfrontend/Cshmgen.v +++ b/cfrontend/Cshmgen.v @@ -355,11 +355,13 @@ Fixpoint transl_expr (a: Clight.expr) {struct a} : res expr := | Clight.Ecast b ty => do tb <- transl_expr b; OK (make_cast (typeof b) ty tb) - | Clight.Econdition b c d _ => + | Clight.Econdition b c d ty => do tb <- transl_expr b; do tc <- transl_expr c; do td <- transl_expr d; - OK(Econdition (make_boolean tb (typeof b)) tc td) + OK(Econdition (make_boolean tb (typeof b)) + (make_cast (typeof c) ty tc) + (make_cast (typeof d) ty td)) | Clight.Esizeof ty _ => OK(make_intconst (Int.repr (Csyntax.sizeof ty))) | Clight.Efield b i ty => -- cgit