ParenType and FunctionType are added to the SmPL AST as types. Match these types correctly.
Signed-off-by: Jaskaran Singh <jaskaransingh7654...@gmail.com> --- engine/check_exhaustive_pattern.ml | 2 ++ engine/cocci_vs_c.ml | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/engine/check_exhaustive_pattern.ml b/engine/check_exhaustive_pattern.ml index 5a047f73..872c060c 100644 --- a/engine/check_exhaustive_pattern.ml +++ b/engine/check_exhaustive_pattern.ml @@ -149,6 +149,8 @@ let dumb_astcocci_type = function | A.SignedT (signa,tya) -> () | A.Pointer (typa, _) -> () | A.FunctionPointer(ty,lp1,star,rp1,lp2,params,rp2) -> () + | A.ParenType(lp,ty,rp) -> () + | A.FunctionType(ty,lp,params,rp) -> () | A.Array (typa, _, eaopt, _) -> () | A.Decimal(_, _, _, _, _, _) -> () | A.EnumName(en, ena) -> () diff --git a/engine/cocci_vs_c.ml b/engine/cocci_vs_c.ml index a4a0e53b..3e0eb50e 100644 --- a/engine/cocci_vs_c.ml +++ b/engine/cocci_vs_c.ml @@ -3785,6 +3785,29 @@ and (typeC: (A.typeC, Ast_c.typeC) matcher) = | _ -> fail ) + | A.ParenType (lpa, typa, rpa), (B.ParenType typb, ii) -> + let (lpb, rpb) = tuple_of_list2 ii in + fullType typa typb >>= (fun typa typb -> + tokenf lpa lpb >>= (fun lpa lpb -> + tokenf rpa rpb >>= (fun rpa rpb -> + return ( + (A.ParenType (lpa, typa, rpa)) +> A.rewrap ta, + (B.ParenType (typb), [lpb;rpb]) + )))) + + | A.FunctionType (typa, lpa, paramsa, rpa), + (B.FunctionType (typb, (paramsb, (isvaargs, iidotsb))), ii) -> + let (lpb, rpb) = tuple_of_list2 ii in + fullType typa typb >>= (fun typa typb -> + tokenf lpa lpb >>= (fun lpa lpb -> + tokenf rpa rpb >>= (fun rpa rpb -> + parameters (seqstyle paramsa) (A.unwrap paramsa) paramsb >>= + (fun paramsaunwrap paramsb -> + let paramsa = A.rewrap paramsa paramsaunwrap in + return ( + (A.FunctionType (typa, lpa, paramsa, rpa)) +> A.rewrap ta, + (B.FunctionType (typb, (paramsb, (isvaargs, iidotsb))), [lpb;rpb]) + ))))) (* todo: handle the iso on optional size specification ? *) @@ -4361,6 +4384,10 @@ and compatible_typeC a (b,local) = | A.FunctionPointer (a, _, _, _, _, _, _), _ -> failwith "TODO: function pointer type doesn't store enough information to determine compatibility" + | A.ParenType (_, a, _), (qub, (B.ParenType b, ii)) -> + compatible_type a (b, local) + | A.FunctionType (a, _, _, _), (qub, (B.FunctionType (b,_), ii)) -> + compatible_type a (b, local) | A.Array (a, _, _, _), (qub, (B.Array (eopt, b),ii)) -> (* no size info for cocci *) compatible_type a (b, local) -- 2.21.1 _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci