[threadsafety] Skip indirect calls in C++

Summary:
They are expected to occur in C++ code, so don't fail on them. For now
just skip them, although a better treatment of dynamic dispatch may be
needed later.

Reviewed By: da319, mbouaziz

Differential Revision: D5292462

fbshipit-source-id: 4285514
master
Josh Berdine 8 years ago committed by Facebook Github Bot
parent 77c56de7a9
commit 926c6fee97

@ -810,7 +810,11 @@ module TransferFunctions (CFG : ProcCfg.S) = struct
astate in astate in
{ astate' with accesses; } { astate' with accesses; }
| Call (_, Indirect _, _, _, _) -> | Call (_, Indirect _, _, _, _) ->
match Procdesc.get_proc_name pdesc with
| Typ.Procname.Java _ ->
failwithf "Unexpected indirect call instruction %a" HilInstr.pp instr failwithf "Unexpected indirect call instruction %a" HilInstr.pp instr
| _ ->
astate
end end
module Analyzer = AbstractInterpreter.Make (ProcCfg.Normal) (LowerHil.Make(TransferFunctions)) module Analyzer = AbstractInterpreter.Make (ProcCfg.Normal) (LowerHil.Make(TransferFunctions))

@ -11,8 +11,6 @@ open! IStd
module F = Format module F = Format
module AccessPathSetDomain = AbstractDomain.InvertedSet(AccessPath.RawSet)
module Access = struct module Access = struct
type kind = type kind =
| Read | Read

@ -11,8 +11,6 @@ open! IStd
module F = Format module F = Format
module AccessPathSetDomain : module type of AbstractDomain.InvertedSet (AccessPath.RawSet)
module Access : sig module Access : sig
type kind = type kind =
| Read | Read

Loading…
Cancel
Save