
cast.c:1:13: Mutable abstract type abst1 declared without pointer indirection:
                int (violates assignment semantics)
cast.c:1:20: Mutable abstract type abst2 declared without pointer indirection:
                int (violates assignment semantics)
cast.c: (in function main)
cast.c:6:13: Variable b initialized to type int, expects abst2: 3
cast.c:7:25: Cast to underlying abstract type abst2 *:
                (abst2 *)malloc(sizeof(abst2))
cast.c:11:10: Dereference of possibly null pointer ip: *ip
   cast.c:9:14: Storage ip may become null
cast.c:12:10: Dereference of possibly null pointer bp: *bp
   cast.c:7:15: Storage bp may become null
cast.c:12:9: Assignment of int to abst2: *bp = 5
cast.c:13:21: Cast to abstract type abst1: (abst1)ip
cast.c:14:24: Cast to underlying abstract type abst1 *: (abst1 *)ip
cast.c:15:22: Cast to underlying abstract type FILE *: (FILE *)ip
cast.c:16:21: Redundant cast involving abstract type abst1: (abst1)a
cast.c:17:22: Cast from underlying abstract type abst1 *: (int *)ap
cast.c:18:22: Cast from underlying abstract type FILE *: (int *)f
cast.c:19:22: Cast from underlying abstract type abst1: (int *)a
cast.c:20:21: Cast from abstract type abst2: (abst1)b
cast.c:20:21: Cast to abstract type abst1: (abst1)b
cast.c:21:24: Cast to underlying abstract type abst1 *: (abst1 *)bp
cast.c:21:24: Cast from underlying abstract type abst2 *: (abst1 *)bp
cast.c:22:19: Owned storage ap not released before return
   cast.c:21:10: Storage ap becomes owned
cast.c:22:19: Last reference ip to owned storage a not released before return
   cast.c:20:10: Original reference lost

Finished checking --- 20 code warnings, as expected

cast2.c: (in function f1)
cast2.c:9:10: Implicitly temp storage x returned as implicitly only: x
cast2.c:9:10: Function returns reference to parameter x: x
cast2.c: (in function f2)
cast2.c:15:10: Implicitly dependent storage x returned as implicitly only:
                  (abst1)x

Finished checking --- 3 code warnings, as expected
