let rec direct_lval d = match d with
      | F.D1null | F.D1base _ 
      | F.D1mu _ | F.D1muRange _ | F.D1muI _ | F.D1muIrange _ ->
          unsupported "forbiden lvalue: %a" F.pp_data d
      | F.D1var (None, v) ->
          Wp_parameters.fatal "lvalue is a logic variable %a ?" F.pp_var v
      | F.D1addr _ -> true
      | F.D1var _ | F.D1indir _ | F.D1proj _ -> false
      | F.D1depl (d, _) | F.D1shift (d, _) -> direct_lval d