Skip to content

Commit 4d02e02

Browse files
committed
C++: dbscheme/library changes to support C99 designated initializers
1 parent 6c50092 commit 4d02e02

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

cpp/ql/src/semmle/code/cpp/exprs/Literal.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class ClassAggregateLiteral extends AggregateLiteral {
173173
*/
174174
Expr getFieldExpr(Field field) {
175175
field = classType.getAField() and
176-
result = getChild(field.getInitializationOrder())
176+
aggregate_field_init(this, result, field)
177177
}
178178

179179
/**
@@ -230,7 +230,7 @@ class ArrayAggregateLiteral extends AggregateLiteral {
230230
* element `elementIndex`, if present.
231231
*/
232232
Expr getElementExpr(int elementIndex) {
233-
result = getChild(elementIndex)
233+
aggregate_array_init(this, result, elementIndex)
234234
}
235235

236236
/**

cpp/ql/src/semmlecode.cpp.dbscheme

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,18 @@ new_array_allocated_type(
14001400
int type_id: @type ref
14011401
);
14021402

1403+
aggregate_field_init(
1404+
unique int aggregate: @aggregateliteral ref,
1405+
int initializer: @expr ref,
1406+
int field: @membervariable ref
1407+
);
1408+
1409+
aggregate_array_init(
1410+
unique int aggregate: @aggregateliteral ref,
1411+
int initializer: @expr ref,
1412+
int element_index: int ref
1413+
);
1414+
14031415
@ctorinit = @ctordirectinit
14041416
| @ctorvirtualinit
14051417
| @ctorfieldinit

0 commit comments

Comments
 (0)