Skip to content

Commit 0f8edd2

Browse files
committed
Add test case for handle overloaded operator-> for CallExpression
1 parent a73c2c4 commit 0f8edd2

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

cpg-language-cxx/src/test/kotlin/de/fraunhofer/aisec/cpg/frontends/cxx/CXXDeclarationTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,41 @@ class CXXDeclarationTest {
306306
assertEquals(p, opCall.base)
307307
assertInvokes(opCall, op)
308308
}
309+
310+
@Test
311+
fun testCallExpressionOperator() {
312+
val file = File("src/test/resources/cxx/operators/call_expression.cpp")
313+
val result =
314+
analyze(listOf(file), file.parentFile.toPath(), true) {
315+
it.registerLanguage<CPPLanguage>()
316+
}
317+
assertNotNull(result)
318+
319+
var proxy = result.records["Proxy"]
320+
assertNotNull(proxy)
321+
322+
var op = proxy.operators["operator->"]
323+
assertNotNull(op)
324+
325+
var data = result.records["Data"]
326+
assertNotNull(data)
327+
328+
var funcFoo = data.functions["foo"]
329+
assertNotNull(funcFoo)
330+
331+
val p = result.refs["p"]
332+
assertNotNull(p)
333+
assertEquals(proxy.toType(), p.type)
334+
335+
var funcFooRef = result.memberExpressions["foo"]
336+
assertNotNull(funcFooRef)
337+
assertRefersTo(funcFooRef, funcFoo)
338+
339+
// we should now have an implicit call to our operator in-between "p" and "foo"
340+
val opCall = funcFooRef.base
341+
assertNotNull(opCall)
342+
assertIs<OperatorCallExpression>(opCall)
343+
assertEquals(p, opCall.base)
344+
assertInvokes(opCall, op)
345+
}
309346
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
struct Data {
2+
int foo() {
3+
return 1;
4+
}
5+
};
6+
7+
struct Proxy {
8+
Data *data;
9+
Proxy() {
10+
data = new Data;
11+
}
12+
Data* operator->() {
13+
return data;
14+
}
15+
};
16+
17+
int main() {
18+
Proxy p;
19+
20+
int i = p->foo();
21+
return 1;
22+
}
23+

0 commit comments

Comments
 (0)