Skip to content

Commit 647d11a

Browse files
committed
C++: Add test for C++23 multidimensional subscript operators
1 parent 217c5cb commit 647d11a

File tree

3 files changed

+82
-0
lines changed

3 files changed

+82
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#-----| [CopyAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag const&)
2+
#-----| <params>:
3+
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
4+
#-----| Type = [LValueReferenceType] const __va_list_tag &
5+
#-----| [MoveAssignmentOperator] __va_list_tag& __va_list_tag::operator=(__va_list_tag&&)
6+
#-----| <params>:
7+
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
8+
#-----| Type = [RValueReferenceType] __va_list_tag &&
9+
test.cpp:
10+
# 3| [CopyAssignmentOperator] S& S::operator=(S const&)
11+
# 3| <params>:
12+
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
13+
#-----| Type = [LValueReferenceType] const S &
14+
# 3| [MoveAssignmentOperator] S& S::operator=(S&&)
15+
# 3| <params>:
16+
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
17+
#-----| Type = [RValueReferenceType] S &&
18+
# 5| [MemberFunction] int S::operator[](int, int)
19+
# 5| <params>:
20+
# 5| getParameter(0): [Parameter] i
21+
# 5| Type = [IntType] int
22+
# 5| getParameter(1): [Parameter] j
23+
# 5| Type = [IntType] int
24+
# 5| getEntryPoint(): [BlockStmt] { ... }
25+
# 6| getStmt(0): [ReturnStmt] return ...
26+
# 6| getExpr(): [ArrayExpr] access to array
27+
# 6| Type = [IntType] int
28+
# 6| ValueCategory = prvalue(load)
29+
# 6| getArrayBase(): [ArrayExpr] access to array
30+
# 6| Type = [ArrayType] int[2]
31+
# 6| ValueCategory = lvalue
32+
# 6| getArrayBase(): [ImplicitThisFieldAccess,PointerFieldAccess] xs
33+
# 6| Type = [ArrayType] int[2][2]
34+
# 6| ValueCategory = lvalue
35+
# 6| getQualifier(): [ThisExpr] this
36+
# 6| Type = [PointerType] S *
37+
# 6| ValueCategory = prvalue(load)
38+
# 6| getArrayOffset(): [VariableAccess] i
39+
# 6| Type = [IntType] int
40+
# 6| ValueCategory = prvalue(load)
41+
#-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
42+
#-----| Type = [PointerType] int(*)[2]
43+
#-----| ValueCategory = prvalue
44+
# 6| getArrayOffset(): [VariableAccess] j
45+
# 6| Type = [IntType] int
46+
# 6| ValueCategory = prvalue(load)
47+
# 6| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
48+
# 6| Type = [IntPointerType] int *
49+
# 6| ValueCategory = prvalue
50+
# 10| [TopLevelFunction] int foo(S)
51+
# 10| <params>:
52+
# 10| getParameter(0): [Parameter] s
53+
# 10| Type = [Struct] S
54+
# 10| getEntryPoint(): [BlockStmt] { ... }
55+
# 11| getStmt(0): [ReturnStmt] return ...
56+
# 11| getExpr(): [OverloadedArrayExpr] call to operator[]
57+
# 11| Type = [IntType] int
58+
# 11| ValueCategory = prvalue
59+
# 11| getArrayBase(): [VariableAccess] s
60+
# 11| Type = [Struct] S
61+
# 11| ValueCategory = lvalue
62+
# 11| getArrayOffset(): [Literal] 1
63+
# 11| Type = [IntType] int
64+
# 11| Value = [Literal] 1
65+
# 11| ValueCategory = prvalue
66+
# 11| getArgument(1): [Literal] 2
67+
# 11| Type = [IntType] int
68+
# 11| Value = [Literal] 2
69+
# 11| ValueCategory = prvalue
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
semmle/code/cpp/PrintAST.ql
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// semmle-extractor-options: -std=c++23
2+
3+
struct S {
4+
int xs[2][2];
5+
int operator[](int i, int j) {
6+
return xs[i][j];
7+
}
8+
};
9+
10+
int foo(S s) {
11+
return s[1, 2];
12+
}

0 commit comments

Comments
 (0)