From 061b5aa8f62e66dbc5d953fb4e7eca10dcfb865e Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Fri, 15 Jan 2021 14:03:47 +0100 Subject: [PATCH] [rte] fatal error if accessing an object whose type is an undefined union --- src/plugins/rte/rte.ml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/plugins/rte/rte.ml b/src/plugins/rte/rte.ml index 94464139655..e2ff580f144 100644 --- a/src/plugins/rte/rte.ml +++ b/src/plugins/rte/rte.ml @@ -111,15 +111,18 @@ let lval_initialized_assertion ~remove_trivial:_ ~on_alarm lv = | NoOffset -> begin match typ with - | TComp({cstruct = false; cfields} ,_,_) -> + | TComp({cstruct = false; cfields; cname} ,_,_) -> (match cfields with - | Some [] | None -> () (* empty union, supported by gcc with size 0. - Trivially initialized. *) - | _ -> + | None -> + Options.fatal + "Access to an object of undefined union %a" + Printer.pp_varname cname + | Some [] -> () (* empty union, supported by gcc with size 0. + Trivially initialized. *) + | Some l -> let llv = List.map - (fun fi -> Cil.addOffsetLval (Field (fi, NoOffset)) lv) - (Option.get cfields) + (fun fi -> Cil.addOffsetLval (Field (fi, NoOffset)) lv) l in if default then on_alarm ~invalid:false (Alarms.Uninitialized_union llv)) -- GitLab