Skip to content

Commit 7a465dd

Browse files
committed
EssentialType: Add maxRank predicate
1 parent cd8ea67 commit 7a465dd

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

c/misra/src/codingstandards/c/misra/EssentialTypes.qll

+10-10
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,13 @@ class EssentialUnaryMinusExpr extends EssentialExpr, UnaryMinusExpr {
257257
}
258258
}
259259

260+
bindingset[essentialTypeA, essentialTypeB]
261+
private Type maxRankType(Type essentialTypeA, Type essentialTypeB) {
262+
if essentialTypeA.getSize() > essentialTypeB.getSize()
263+
then result = essentialTypeA
264+
else result = essentialTypeB
265+
}
266+
260267
class EssentialConditionalExpr extends EssentialExpr, ConditionalExpr {
261268
override Type getEssentialType() {
262269
exists(Type thenEssentialType, Type elseEssentialType |
@@ -269,10 +276,7 @@ class EssentialConditionalExpr extends EssentialExpr, ConditionalExpr {
269276
if
270277
getEssentialTypeCategory(thenEssentialType) = getEssentialTypeCategory(elseEssentialType) and
271278
getEssentialTypeCategory(thenEssentialType) instanceof EssentiallySignedOrUnsignedType
272-
then
273-
if thenEssentialType.getSize() > elseEssentialType.getSize()
274-
then result = thenEssentialType
275-
else result = elseEssentialType
279+
then result = maxRankType(thenEssentialType, elseEssentialType)
276280
else result = this.getStandardType()
277281
)
278282
}
@@ -316,15 +320,11 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
316320
leftEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
317321
then
318322
if exists(getValue())
319-
then (
323+
then
320324
leftEssentialTypeCategory = EssentiallySignedType() and result = stlr(this)
321325
or
322326
leftEssentialTypeCategory = EssentiallyUnsignedType() and result = utlr(this)
323-
) else (
324-
if leftEssentialType.getSize() > rightEssentialType.getSize()
325-
then result = leftEssentialType
326-
else result = rightEssentialType
327-
)
327+
else result = maxRankType(leftEssentialType, rightEssentialType)
328328
else result = this.getStandardType()
329329
)
330330
}

0 commit comments

Comments
 (0)