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: