diff --git a/ql/test/callgraph/Overrides.qll b/ql/test/callgraph/Overrides.qll new file mode 100644 index 00000000000..1adcab1b949 --- /dev/null +++ b/ql/test/callgraph/Overrides.qll @@ -0,0 +1,30 @@ +import ql + +class Foo extends int { + Foo() { this in [1, 2, 3] } + + int bar() { result = this } + + predicate baz(int i) { i = this.bar() } +} + +class Bar extends Foo { + Bar() { this = [1, 2] } + + override int bar() { result = 10 * this } + + override predicate baz(int i) { i = this.bar() } +} + +class Baz extends Foo { + Baz() { this = 1 } + + override int bar() { result = 100 * this } + + override predicate baz(int i) { i = this.bar() } +} + +query predicate test(Foo f, int i, int j) { + f.bar() = i and + f.baz(j) +} diff --git a/ql/test/callgraph/callgraph.expected b/ql/test/callgraph/callgraph.expected index 39ba4dd101a..6638c45993c 100644 --- a/ql/test/callgraph/callgraph.expected +++ b/ql/test/callgraph/callgraph.expected @@ -6,3 +6,10 @@ | Foo.qll:29:5:29:16 | PredicateCall | Foo.qll:26:3:26:32 | ClasslessPredicate alias2 | | Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:22:3:22:32 | ClasslessPredicate myThing0 | | Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:24:3:24:32 | ClasslessPredicate alias0 | +| Overrides.qll:8:30:8:39 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar | +| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar | +| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:14:12:14:43 | ClassPredicate bar | +| Overrides.qll:24:39:24:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar | +| Overrides.qll:24:39:24:48 | MemberCall | Overrides.qll:22:12:22:44 | ClassPredicate bar | +| Overrides.qll:28:3:28:9 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar | +| Overrides.qll:29:3:29:10 | MemberCall | Overrides.qll:8:3:8:41 | ClassPredicate baz |