Skip to content

Commit 21f9527

Browse files
authored
Merge pull request github#12758 from MathiasVP/deprecate-after-repeated-initializers
C++: Deprecate single-parameter `getFieldExpr` and `getElementExpr`
2 parents 03c2837 + 32d16b6 commit 21f9527

File tree

13 files changed

+144
-140
lines changed

13 files changed

+144
-140
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: deprecated
3+
---
4+
* The predicates single-parameter predicates `ArrayOrVectorAggregateLiteral.getElementExpr` and `ClassAggregateLiteral.getFieldExpr` have been deprecated in favor of `ArrayOrVectorAggregateLiteral.getAnElementExpr` and `ClassAggregateLiteral.getAFieldExpr`.

cpp/ql/lib/semmle/code/cpp/PrintAST.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -752,13 +752,13 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
752752
expr.(VariableAccess).getQualifier() = ele and pred = "getQualifier()"
753753
or
754754
exists(Field f |
755-
expr.(ClassAggregateLiteral).getFieldExpr(f) = ele and
756-
pred = "getFieldExpr(" + f.toString() + ")"
755+
expr.(ClassAggregateLiteral).getAFieldExpr(f) = ele and
756+
pred = "getAFieldExpr(" + f.toString() + ")"
757757
)
758758
or
759759
exists(int n |
760-
expr.(ArrayOrVectorAggregateLiteral).getElementExpr(n) = ele and
761-
pred = "getElementExpr(" + n.toString() + ")"
760+
expr.(ArrayOrVectorAggregateLiteral).getAnElementExpr(n) = ele and
761+
pred = "getAnElementExpr(" + n.toString() + ")"
762762
)
763763
or
764764
expr.(AlignofExprOperator).getExprOperand() = ele and pred = "getExprOperand()"

cpp/ql/lib/semmle/code/cpp/Variable.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class Variable extends Declaration, @variable {
133133
or
134134
exists(AssignExpr ae | ae.getLValue().(Access).getTarget() = this and result = ae.getRValue())
135135
or
136-
exists(ClassAggregateLiteral l | result = l.getFieldExpr(this))
136+
exists(ClassAggregateLiteral l | result = l.getAFieldExpr(this))
137137
}
138138

139139
/**

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ predicate storeStep(Node node1, Content f, PostUpdateNode node2) {
159159
// `PostUpdateNode`, which means it must be an `ObjectInitializerNode`.
160160
node2.asExpr() = aggr and
161161
f.(FieldContent).getField() = field and
162-
aggr.getFieldExpr(field) = node1.asExpr()
162+
aggr.getAFieldExpr(field) = node1.asExpr()
163163
)
164164
or
165165
exists(FieldAccess fa |

cpp/ql/lib/semmle/code/cpp/exprs/Lambda.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class LambdaCapture extends Locatable, @lambdacapture {
147147
*/
148148
Expr getInitializer() {
149149
exists(LambdaExpression lambda | this = lambda.getCapture(_) |
150-
result = lambda.getInitializer().getFieldExpr(this.getField())
150+
result = lambda.getInitializer().getAFieldExpr(this.getField())
151151
)
152152
}
153153
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ class ClassAggregateLiteral extends AggregateLiteral {
204204
* This predicate may have multiple results since a field can be initialized
205205
* multiple times in the same initializer.
206206
*/
207-
Expr getFieldExpr(Field field) { result = this.getFieldExpr(field, _) }
207+
deprecated Expr getFieldExpr(Field field) { result = this.getFieldExpr(field, _) }
208208

209209
/**
210210
* Gets the expression within the aggregate literal that is used to initialize
@@ -238,7 +238,7 @@ class ClassAggregateLiteral extends AggregateLiteral {
238238
(
239239
// If the field has an explicit initializer expression, then the field is
240240
// initialized.
241-
exists(this.getFieldExpr(field))
241+
exists(this.getAFieldExpr(field))
242242
or
243243
// If the type is not a union, all fields without initializers are value
244244
// initialized.
@@ -262,7 +262,7 @@ class ClassAggregateLiteral extends AggregateLiteral {
262262
pragma[inline]
263263
predicate isValueInitialized(Field field) {
264264
this.isInitialized(field) and
265-
not exists(this.getFieldExpr(field))
265+
not exists(this.getAFieldExpr(field))
266266
}
267267
}
268268

@@ -309,7 +309,7 @@ class ArrayOrVectorAggregateLiteral extends AggregateLiteral {
309309
* This predicate may have multiple results since an element can be initialized
310310
* multiple times in the same initializer.
311311
*/
312-
Expr getElementExpr(int elementIndex) { result = this.getElementExpr(elementIndex, _) }
312+
deprecated Expr getElementExpr(int elementIndex) { result = this.getElementExpr(elementIndex, _) }
313313

314314
/**
315315
* Gets the expression within the aggregate literal that is used to initialize
@@ -351,7 +351,7 @@ class ArrayOrVectorAggregateLiteral extends AggregateLiteral {
351351
bindingset[elementIndex]
352352
predicate isValueInitialized(int elementIndex) {
353353
this.isInitialized(elementIndex) and
354-
not exists(this.getElementExpr(elementIndex))
354+
not exists(this.getAnElementExpr(elementIndex))
355355
}
356356
}
357357

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -606,9 +606,9 @@ newtype TTranslatedElement =
606606
not ignoreExpr(expr) and
607607
(
608608
exists(Initializer init | init.getExpr().getFullyConverted() = expr) or
609-
exists(ClassAggregateLiteral initList | initList.getFieldExpr(_).getFullyConverted() = expr) or
609+
exists(ClassAggregateLiteral initList | initList.getAFieldExpr(_).getFullyConverted() = expr) or
610610
exists(ArrayOrVectorAggregateLiteral initList |
611-
initList.getElementExpr(_).getFullyConverted() = expr
611+
initList.getAnElementExpr(_).getFullyConverted() = expr
612612
) or
613613
exists(ReturnStmt returnStmt | returnStmt.getExpr().getFullyConverted() = expr) or
614614
exists(ConstructorFieldInit fieldInit | fieldInit.getExpr().getFullyConverted() = expr) or
@@ -785,7 +785,7 @@ private int getNextExplicitlyInitializedElementAfter(
785785
ArrayOrVectorAggregateLiteral initList, int afterElementIndex
786786
) {
787787
isFirstValueInitializedElementInRange(initList, afterElementIndex) and
788-
result = min(int i | exists(initList.getElementExpr(i)) and i > afterElementIndex)
788+
result = min(int i | exists(initList.getAnElementExpr(i)) and i > afterElementIndex)
789789
}
790790

791791
/**
@@ -798,7 +798,7 @@ private predicate isFirstValueInitializedElementInRange(
798798
initList.isValueInitialized(elementIndex) and
799799
(
800800
elementIndex = 0 or
801-
exists(initList.getElementExpr(elementIndex - 1))
801+
exists(initList.getAnElementExpr(elementIndex - 1))
802802
)
803803
}
804804

cpp/ql/lib/semmle/code/cpp/valuenumbering/HashCons.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ private predicate mk_FieldCons(
741741
analyzableClassAggregateLiteral(cal) and
742742
cal.getUnspecifiedType() = c and
743743
exists(Expr e |
744-
e = cal.getFieldExpr(f).getFullyConverted() and
744+
e = cal.getAFieldExpr(f).getFullyConverted() and
745745
f.getInitializationOrder() = i and
746746
(
747747
hc = hashCons(e) and
@@ -757,9 +757,9 @@ private predicate mk_FieldCons(
757757
private predicate analyzableClassAggregateLiteral(ClassAggregateLiteral cal) {
758758
forall(int i | exists(cal.getChild(i)) |
759759
strictcount(cal.getChild(i).getFullyConverted()) = 1 and
760-
strictcount(Field f | cal.getChild(i) = cal.getFieldExpr(f)) = 1 and
760+
strictcount(Field f | cal.getChild(i) = cal.getAFieldExpr(f)) = 1 and
761761
strictcount(Field f, int j |
762-
cal.getFieldExpr(f) = cal.getChild(i) and j = f.getInitializationOrder()
762+
cal.getAFieldExpr(f) = cal.getChild(i) and j = f.getInitializationOrder()
763763
) = 1
764764
)
765765
}

0 commit comments

Comments
 (0)