//unsafe code propagation rule rule: (X: function, Y: function) case X call Y { warning Y tag unsafe -> X tag unsafe message "safe function should not call unsafe code" } testfunc3 = function: (a: num, b: num)->num , unsafe //function tags list { x = a+b: num; y = a - b: num; (x + y) / 2; } testfunc2 = function: (a: num)->bool // since testfunc3 marked as unsafe code, // testfunc2 should be marked so too { b = testfunc3(a+1, a-1): num; (b==0); }