diff --git a/src/plugins/alias/options.ml b/src/plugins/alias/options.ml index 145ddcdec77d772085559e5bf8b75be23890a65a..fcbea32ee651e2984d0620d9440b697bbb04da49 100644 --- a/src/plugins/alias/options.ml +++ b/src/plugins/alias/options.ml @@ -74,6 +74,7 @@ module Warn = struct let unsupported_address = register_warn_category "unsupported:addr" let unsupported_asm = register_warn_category "unsupported:asm" let unsupported_function = register_warn_category "unsupported:fn" + let unsafe_cast = register_warn_category "unsafe-cast" end module DebugKeys = struct diff --git a/src/plugins/alias/options.mli b/src/plugins/alias/options.mli index c2a3c0b6e362a5c9cc2ac0dffc2ec6bd1dfb7cb0..1a5dd44638c084c430049a9b2c81dc85dc3dd199 100644 --- a/src/plugins/alias/options.mli +++ b/src/plugins/alias/options.mli @@ -47,6 +47,7 @@ module Warn : sig val unsupported_address : warn_category val unsupported_asm : warn_category val unsupported_function : warn_category + val unsafe_cast : warn_category end module DebugKeys : sig diff --git a/src/plugins/alias/simplified.ml b/src/plugins/alias/simplified.ml index b1dc0b6a07a73fc922d3232687bc6dd5545e4c0e..00be54d30989b46b20d38b4c8edf7f58134239bb 100644 --- a/src/plugins/alias/simplified.ml +++ b/src/plugins/alias/simplified.ml @@ -47,6 +47,13 @@ exception IsExp of exp exception Explicit_pointer_address of location +let check_cast_compatibility e typ = + let type_of_e = Cil.typeOf e in + if Cil.need_cast typ type_of_e then + Options.warning ~once:true ~source:(fst @@ e.eloc) ~wkey:Options.Warn.unsafe_cast + "unsafe cast from %a to %a" + Printer.pp_typ type_of_e Printer.pp_typ typ + let rec simplify_lval (h,o) = try HL.find cached_lval (h,o) with Not_found -> @@ -87,7 +94,9 @@ and simplify_exp e = | AddrOf lv -> Lval lv | _ -> raise (Explicit_pointer_address e1.eloc) end - | CastE(_,e) -> raise (IsExp (simplify_exp e)) + | CastE (typ, e) -> + let () = check_cast_compatibility e typ in + raise (IsExp (simplify_exp e)) | _ -> raise (IsExp nul_exp) in {e with enode=simplified_enode} diff --git a/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle index 3817063c01643bd152aca7d6af50c35cdd3efdf5..d9c4c50457394c00c1f75827d74ea3455aadce76 100644 --- a/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/assignment1.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing assignment1.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] assignment1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] assignment1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] assignment1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] assignment1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: a = b; [alias] May-aliases at the end of instruction: a = b; diff --git a/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle index cf731c11e90f50512282a1266a81da2434d3cec8..6438b8a5e18e97cc8b28782fd21268c72afdd317 100644 --- a/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/assignment2.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing assignment2.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int **a = (int **)0; +[alias:unsafe-cast] assignment2.c:8: Warning: unsafe cast from int to int ** [alias] May-aliases at the end of instruction: int **a = (int **)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] assignment2.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int **c = (int **)0; +[alias:unsafe-cast] assignment2.c:8: Warning: unsafe cast from int to int ** [alias] May-aliases at the end of instruction: int **c = (int **)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] assignment2.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: *a = b; [alias] May-aliases at the end of instruction: *a = b; diff --git a/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle index 1841f4eb4ce40f9304f61bd8b3c651b15b8d9ef2..198c7753a2fe4bd733c91b14cbe52646a333ff54 100644 --- a/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/assignment3.res.oracle @@ -1,10 +1,12 @@ [kernel] Parsing assignment3.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] assignment3.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int b = 0; [alias] May-aliases at the end of instruction: int b = 0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] assignment3.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: a = & b; [alias] May-aliases at the end of instruction: a = & b; diff --git a/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle index 62755dccb744fddbab07a4ae1281964999a8f7d8..7c1c4f02990fa5f236a2b317c24ffb248a81e7ea 100644 --- a/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/assignment4.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing assignment4.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int **a = (int **)0; +[alias:unsafe-cast] assignment4.c:8: Warning: unsafe cast from int to int ** [alias] May-aliases at the end of instruction: int **a = (int **)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] assignment4.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int **c = (int **)0; +[alias:unsafe-cast] assignment4.c:8: Warning: unsafe cast from int to int ** [alias] May-aliases at the end of instruction: int **c = (int **)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] assignment4.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: *a = b; [alias] May-aliases at the end of instruction: *a = b; diff --git a/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle b/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle index 701c948fbd3a70684d47fd3f9b9f36498c5a985b..f54e8937508c15e80dec22fdb213f8301c180159 100644 --- a/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/assignment5.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing assignment5.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int ***a = (int ***)0; +[alias:unsafe-cast] assignment5.c:7: Warning: unsafe cast from int to int *** [alias] May-aliases at the end of instruction: int ***a = (int ***)0; [alias] analysing instruction: int **b = (int **)0; +[alias:unsafe-cast] assignment5.c:7: Warning: unsafe cast from int to int ** [alias] May-aliases at the end of instruction: int **b = (int **)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] assignment5.c:7: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] assignment5.c:7: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: *a = b; [alias] May-aliases at the end of instruction: *a = b; diff --git a/src/plugins/alias/tests/basic/oracle/cast1.res.oracle b/src/plugins/alias/tests/basic/oracle/cast1.res.oracle index fda4dcf8b1dfdd7970e4f435d03fd2a6424602ed..c568a7791dce1d06f669710c3649a1b307be12be 100644 --- a/src/plugins/alias/tests/basic/oracle/cast1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/cast1.res.oracle @@ -1,17 +1,23 @@ [kernel] Parsing cast1.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] cast1.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] cast1.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: float *c = (float *)0; +[alias:unsafe-cast] cast1.c:9: Warning: unsafe cast from int to float * [alias] May-aliases at the end of instruction: float *c = (float *)0; [alias] analysing instruction: float *d = (float *)0; +[alias:unsafe-cast] cast1.c:9: Warning: unsafe cast from int to float * [alias] May-aliases at the end of instruction: float *d = (float *)0; [alias] analysing instruction: a = (int *)c; +[alias:unsafe-cast] cast1.c:10: Warning: unsafe cast from float * to int * [alias] May-aliases at the end of instruction: a = (int *)c; {a, c} are aliased [alias] analysing instruction: d = (float *)b; +[alias:unsafe-cast] cast1.c:11: Warning: unsafe cast from int * to float * [alias] May-aliases at the end of instruction: d = (float *)b; {a, c} are aliased {b, d} are aliased diff --git a/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle b/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle index ae6d793681ea7bd96a220db9774a6ba8cef177eb..a2bcc51e7ecacd448aca31eb0288ee096094366a 100644 --- a/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/conditional1.res.oracle @@ -1,10 +1,13 @@ [kernel] Parsing conditional1.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] conditional1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] conditional1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] conditional1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: a = b; [alias] May-aliases at the end of instruction: a = b; diff --git a/src/plugins/alias/tests/basic/oracle/function1.res.oracle b/src/plugins/alias/tests/basic/oracle/function1.res.oracle index 786d8a11dec894eef60826f40bf2bb77cffa35be..5856da9a875a376e544fff383104dd8a68a2496d 100644 --- a/src/plugins/alias/tests/basic/oracle/function1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/function1.res.oracle @@ -1,16 +1,21 @@ [kernel] Parsing function1.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] function1.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] function1.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] function1.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] function1.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: swap(a,b); [alias] analysing function: swap [alias] analysing instruction: int *z = (int *)0; +[alias:unsafe-cast] function1.c:7: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *z = (int *)0; [alias] analysing instruction: z = x; [alias] May-aliases at the end of instruction: z = x; diff --git a/src/plugins/alias/tests/basic/oracle/function2.res.oracle b/src/plugins/alias/tests/basic/oracle/function2.res.oracle index 6469ba8a9b6e123a602610df592f9f39df99a585..75083b17a425768087fdfc8ca4051e96c5c64f66 100644 --- a/src/plugins/alias/tests/basic/oracle/function2.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/function2.res.oracle @@ -49,12 +49,15 @@ [alias] May-aliases at the end of function lrand48: [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] function2.c:14: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] function2.c:14: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: a = my_malloc(2); [alias] analysing function: my_malloc [alias] analysing instruction: int *res = (int *)0; +[alias:unsafe-cast] function2.c:7: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *res = (int *)0; [alias] analysing instruction: res = (int *)malloc((size_t)size); [alias] May-aliases at the end of instruction: res = (int *)malloc((size_t)size); diff --git a/src/plugins/alias/tests/basic/oracle/function3.res.oracle b/src/plugins/alias/tests/basic/oracle/function3.res.oracle index 299f1560a54014f79c68163d1158631d6c21d1ec..1ca2d7367e852b8933c89f920f09051bb02d42d3 100644 --- a/src/plugins/alias/tests/basic/oracle/function3.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/function3.res.oracle @@ -10,18 +10,23 @@ [alias] May-aliases at the end of instruction: y = tmp; {x, y, tmp} are aliased [alias] analysing instruction: __retres = (void *)0; +[alias:unsafe-cast] function3.c:14: Warning: unsafe cast from int to void * [alias] May-aliases at the end of instruction: __retres = (void *)0; {x, y, tmp} are aliased [alias] May-aliases at the end of function f1: {x, y, tmp} are aliased [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] function3.c:19: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] function3.c:19: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] function3.c:19: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] function3.c:19: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: f1(a,b); [alias] May-aliases at the end of instruction: f1(a,b); diff --git a/src/plugins/alias/tests/basic/oracle/function4.res.oracle b/src/plugins/alias/tests/basic/oracle/function4.res.oracle index 1cffe3ea3ceb0ebae81835d2656653bf53c57142..ace7aee01822f2a8717dbb475131c1d08c7ef976 100644 --- a/src/plugins/alias/tests/basic/oracle/function4.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/function4.res.oracle @@ -3,8 +3,10 @@ [alias] May-aliases at the end of function addr: [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] function4.c:11: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] function4.c:11: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int c = 0; [alias] May-aliases at the end of instruction: int c = 0; diff --git a/src/plugins/alias/tests/basic/oracle/function5.res.oracle b/src/plugins/alias/tests/basic/oracle/function5.res.oracle index c088cf63102bfa02abf6e990142a17b28ac5ce6e..8510888b05902e1aa75cb21943778e320c76db5c 100644 --- a/src/plugins/alias/tests/basic/oracle/function5.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/function5.res.oracle @@ -12,10 +12,13 @@ {x, y, __retres} are aliased [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] function5.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] function5.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] function5.c:16: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: c = choice(a,b); [alias] May-aliases at the end of instruction: c = choice(a,b); diff --git a/src/plugins/alias/tests/basic/oracle/globctr.res.oracle b/src/plugins/alias/tests/basic/oracle/globctr.res.oracle index 2cb87b870acc099dbc96936aeeb36dfda4c45261..93f034013d8cd4018b91f13a4865a0174a87060d 100644 --- a/src/plugins/alias/tests/basic/oracle/globctr.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/globctr.res.oracle @@ -7,8 +7,10 @@ [alias] May-aliases at the end of function f: [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] globctr.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] globctr.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: f(a); [alias] May-aliases at the end of instruction: f(a); diff --git a/src/plugins/alias/tests/basic/oracle/switch1.res.oracle b/src/plugins/alias/tests/basic/oracle/switch1.res.oracle index 089a3d72e25a6c39b3ce8c1ed3d94afd008c7d58..b6e49fd381fe697804583c01399cef8fb9df795b 100644 --- a/src/plugins/alias/tests/basic/oracle/switch1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/switch1.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing switch1.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] switch1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] switch1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] switch1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] switch1.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: int e = 0; [alias] May-aliases at the end of instruction: int e = 0; diff --git a/src/plugins/alias/tests/basic/oracle/switch2.res.oracle b/src/plugins/alias/tests/basic/oracle/switch2.res.oracle index 6cccc5def218145b05d41721967c9d8e78ebc824..d9a802df5fdbd53792aa8e1249b7d5ae98fd41ec 100644 --- a/src/plugins/alias/tests/basic/oracle/switch2.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/switch2.res.oracle @@ -1,12 +1,16 @@ [kernel] Parsing switch2.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] switch2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] switch2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] switch2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int *d = (int *)0; +[alias:unsafe-cast] switch2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *d = (int *)0; [alias] analysing instruction: int e = 0; [alias] May-aliases at the end of instruction: int e = 0; diff --git a/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle index 048047cf91e59b48a87e6cdbe1bd4c9ae2c08e48..85194a6e1e6d6961202738d2c644c0b1fcdf9948 100644 --- a/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/while_for1.res.oracle @@ -49,6 +49,7 @@ [alias] May-aliases at the end of function lrand48: [alias] analysing function: main [alias] analysing instruction: int *s = (int *)0; +[alias:unsafe-cast] while_for1.c:8: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *s = (int *)0; [alias] analysing instruction: int idx = 0; [alias] May-aliases at the end of instruction: int idx = 0; diff --git a/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle index b3288fba99ce2206c801330e0bd4d7796970911c..0f4e8cd08889a5510d4a50af09e22926c563bf5f 100644 --- a/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/while_for2.res.oracle @@ -1,10 +1,13 @@ [kernel] Parsing while_for2.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] while_for2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] while_for2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] while_for2.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: a = b; [alias] May-aliases at the end of instruction: a = b; diff --git a/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle b/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle index 6c823b7481d6a3434d04f53ad69c3450a3ff4e77..f7d9211bc9cdd4e029ce808077cc67253683cfad 100644 --- a/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle +++ b/src/plugins/alias/tests/basic/oracle/while_for3.res.oracle @@ -1,10 +1,13 @@ [kernel] Parsing while_for3.c (with preprocessing) [alias] analysing function: main [alias] analysing instruction: int *a = (int *)0; +[alias:unsafe-cast] while_for3.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *a = (int *)0; [alias] analysing instruction: int *b = (int *)0; +[alias:unsafe-cast] while_for3.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *b = (int *)0; [alias] analysing instruction: int *c = (int *)0; +[alias:unsafe-cast] while_for3.c:6: Warning: unsafe cast from int to int * [alias] May-aliases at the end of instruction: int *c = (int *)0; [alias] analysing instruction: int i = 0; [alias] May-aliases at the end of instruction: int i = 0; diff --git a/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle b/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle index 5a6da88a9f319c0a864572e24c3113c0a5f49d8e..db08ac0dd30d4c1ec87b5acbe6cb8e8006471646 100644 --- a/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/nested1.res.oracle @@ -71,9 +71,13 @@ [alias] analysing instruction: *b = 5; [alias] May-aliases at the end of instruction: *b = 5; [alias] analysing instruction: z1->s = (struct struct_1_t *)tab_y[0]; +[alias:unsafe-cast] nested1.c:47: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: z1->s = (struct struct_1_t *)tab_y[0]; {z1->s, tab_y[0]} are aliased [alias] analysing instruction: z2->s = (struct struct_1_t *)tab_y[1]; +[alias:unsafe-cast] nested1.c:48: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: z2->s = (struct struct_1_t *)tab_y[1]; {z1->s, z2->s, tab_y[0]} are aliased [alias] analysing instruction: z1->c = a; @@ -86,6 +90,8 @@ {z1->c, a} are aliased {z2->c, b} are aliased [alias] analysing instruction: t->t = (struct struct_2_t *)z1; +[alias:unsafe-cast] nested1.c:51: Warning: + unsafe cast from st_2_t * to struct struct_2_t * [alias] May-aliases at the end of instruction: t->t = (struct struct_2_t *)z1; {z1->s, z2->s, tab_y[0]} are aliased {t->t, z1} are aliased diff --git a/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle b/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle index bb6dee4cbbf8e8cd907f1f336d32831032a3086a..1f66aaa6284bdc1024b6ece9f4283e6b8870f6d9 100644 --- a/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/nested2.res.oracle @@ -61,13 +61,19 @@ [alias] analysing instruction: *a = 0; [alias] May-aliases at the end of instruction: *a = 0; [alias] analysing instruction: z1->s[0] = (struct struct_1_t *)(& x1); +[alias:unsafe-cast] nested2.c:42: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: z1->s[0] = (struct struct_1_t *)(& x1); [alias] analysing instruction: z1->s[1] = (struct struct_1_t *)(& x2); +[alias:unsafe-cast] nested2.c:43: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: z1->s[1] = (struct struct_1_t *)(& x2); [alias] analysing instruction: z1->c = a; [alias] May-aliases at the end of instruction: z1->c = a; {z1->c, a} are aliased [alias] analysing instruction: t->t = (struct struct_2_t *)z1; +[alias:unsafe-cast] nested2.c:45: Warning: + unsafe cast from st_2_t * to struct struct_2_t * [alias] May-aliases at the end of instruction: t->t = (struct struct_2_t *)z1; {t->t, z1} are aliased {z1->c, a} are aliased diff --git a/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle index 1273bdf92b253c81dcc2bc070b5c85c29259ae8f..bd470dc2d74aa30ca56876844fc1e90f198dd7da 100644 --- a/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/structure1.res.oracle @@ -11,6 +11,8 @@ [alias] analysing instruction: p_x->a = 3; [alias] May-aliases at the end of instruction: p_x->a = 3; [alias] analysing instruction: p_x = (st_1_t *)p_y; +[alias:unsafe-cast] structure1.c:28: Warning: + unsafe cast from st_2_t * to st_1_t * [alias] May-aliases at the end of instruction: p_x = (st_1_t *)p_y; {p_x, p_y} are aliased [alias] analysing instruction: __retres = 0; diff --git a/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle index fe54acf9e398a90df1b143ac68d8fe6fbc167f02..fcf43a555f05ad715c13fd1f3dce8ef1af1e1876 100644 --- a/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/structure2.res.oracle @@ -5,10 +5,14 @@ [alias] analysing instruction: st_1_t x2 = {.a = 1, .b = 2}; [alias] May-aliases at the end of instruction: st_1_t x2 = {.a = 1, .b = 2}; [alias] analysing instruction: st_2_t y = {.s = (struct struct_1_t *)(& x1), .c = 4}; +[alias:unsafe-cast] structure2.c:21: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: st_2_t y = {.s = (struct struct_1_t *)(& x1), .c = 4}; [alias] analysing instruction: y.s = (struct struct_1_t *)(& x2); +[alias:unsafe-cast] structure2.c:23: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: y.s = (struct struct_1_t *)(& x2); [alias] analysing instruction: __retres = 0; [alias] May-aliases at the end of instruction: __retres = 0; diff --git a/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle index fd94eb21c5374d0c1399155a3b47bfff2e2d2b43..fb4e83b000e5ab7ea509fcb7b3ad67ba57c7a1fd 100644 --- a/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/structure3.res.oracle @@ -6,19 +6,27 @@ [alias] May-aliases at the end of instruction: st_1_t x2 = {.a = 1, .b = 2}; [alias] analysing instruction: st_2_t y1 = {.s = (struct struct_1_t *)(& x1), .c = 3}; +[alias:unsafe-cast] structure3.c:31: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: st_2_t y1 = {.s = (struct struct_1_t *)(& x1), .c = 3}; [alias] analysing instruction: st_2_t y2 = {.s = (struct struct_1_t *)(& x2), .c = 4}; +[alias:unsafe-cast] structure3.c:32: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: st_2_t y2 = {.s = (struct struct_1_t *)(& x2), .c = 4}; [alias] analysing instruction: st_3_t z = {.t = (struct struct_2_t *)(& y1), .d = 5}; +[alias:unsafe-cast] structure3.c:33: Warning: + unsafe cast from st_2_t * to struct struct_2_t * [alias] May-aliases at the end of instruction: st_3_t z = {.t = (struct struct_2_t *)(& y1), .d = 5}; [alias] analysing instruction: z.t = (struct struct_2_t *)(& y2); +[alias:unsafe-cast] structure3.c:35: Warning: + unsafe cast from st_2_t * to struct struct_2_t * [alias] May-aliases at the end of instruction: z.t = (struct struct_2_t *)(& y2); [alias] analysing instruction: y1.c = z.d; [alias] May-aliases at the end of instruction: y1.c = z.d; diff --git a/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle b/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle index 7ba93a3a399d41ecde81a3e3734700f0f32f3671..988f3aef97f6e429930bf96461096d32caca217e 100644 --- a/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle +++ b/src/plugins/alias/tests/offsets/oracle/structure4.res.oracle @@ -59,6 +59,8 @@ [alias] analysing instruction: y1 = & x1; [alias] May-aliases at the end of instruction: y1 = & x1; [alias] analysing instruction: z->s = (struct struct_1_t *)y1; +[alias:unsafe-cast] structure4.c:37: Warning: + unsafe cast from st_1_t * to struct struct_1_t * [alias] May-aliases at the end of instruction: z->s = (struct struct_1_t *)y1; {z->s, y1} are aliased [alias] analysing instruction: z->c = 6; diff --git a/src/plugins/alias/tests/real_world/oracle/example2.res.oracle b/src/plugins/alias/tests/real_world/oracle/example2.res.oracle index c811043e42cb2332917c42659063d1ad2f7b3679..fbd81b3ae21f9d0b2dfd94b9668b0ed07c4ab7f5 100644 --- a/src/plugins/alias/tests/real_world/oracle/example2.res.oracle +++ b/src/plugins/alias/tests/real_world/oracle/example2.res.oracle @@ -152,6 +152,7 @@ [alias] May-aliases at the end of instruction: swap(tmp->n1); {x, tmp} are aliased [alias] analysing instruction: __retres = (void *)0; +[alias:unsafe-cast] example2.c:49: Warning: unsafe cast from int to void * [alias] May-aliases at the end of instruction: __retres = (void *)0; {x, tmp} are aliased [alias] May-aliases at the end of function f1: @@ -208,6 +209,7 @@ [alias] May-aliases at the end of instruction: swap(tmp->n2); {x, tmp} are aliased [alias] analysing instruction: __retres = (void *)0; +[alias:unsafe-cast] example2.c:74: Warning: unsafe cast from int to void * [alias] May-aliases at the end of instruction: __retres = (void *)0; {x, tmp} are aliased [alias] May-aliases at the end of function f2: