blob: ca8a261a0470f2bc37bad6814b0e74d3da621a84 [file] [log] [blame]
// The type qualifier hierarchy is: @Tainted :> @Untainted
import org.checkerframework.checker.tainting.qual.Tainted;
import org.checkerframework.checker.tainting.qual.Untainted;
public class FakeOverrideReturn {
@Tainted int tf;
@Untainted int uf;
void m(@Tainted int t, @Untainted int u) {
FakeOverrideRSuper sup = new FakeOverrideRSuper();
FakeOverrideRMid mid = new FakeOverrideRMid();
FakeOverrideRSub sub = new FakeOverrideRSub();
tf = sup.returnsTaintedInt();
tf = mid.returnsTaintedInt();
tf = sub.returnsTaintedInt();
// :: error: (assignment)
uf = sup.returnsTaintedInt();
// :: error: (assignment)
uf = mid.returnsTaintedInt();
// :: error: (assignment)
uf = sub.returnsTaintedInt();
tf = sup.returnsUntaintedInt();
tf = mid.returnsUntaintedInt();
tf = sub.returnsUntaintedInt();
uf = sup.returnsUntaintedInt();
uf = mid.returnsUntaintedInt();
uf = sub.returnsUntaintedInt();
tf = sup.returnsTaintedIntWithFakeOverride();
tf = mid.returnsTaintedIntWithFakeOverride();
tf = sub.returnsTaintedIntWithFakeOverride();
// :: error: (assignment)
uf = sup.returnsTaintedIntWithFakeOverride();
uf = mid.returnsTaintedIntWithFakeOverride();
uf = sub.returnsTaintedIntWithFakeOverride();
tf = sup.returnsUntaintedIntWithFakeOverride();
tf = mid.returnsUntaintedIntWithFakeOverride();
tf = sub.returnsUntaintedIntWithFakeOverride();
uf = sup.returnsUntaintedIntWithFakeOverride();
// :: error: (assignment)
uf = mid.returnsUntaintedIntWithFakeOverride();
// :: error: (assignment)
uf = sub.returnsUntaintedIntWithFakeOverride();
}
void poly() {
FakeOverrideRSuper sup = new FakeOverrideRSuper();
FakeOverrideRMid mid = new FakeOverrideRMid();
@Untainted int j = mid.returnsUntaintedIntWithFakeOverride2();
@Untainted int k = sup.returnsPolyTaintedIntWithFakeOverride();
}
}