Skip to content

Commit a00d282

Browse files
committed
C++: Address review comments
1 parent ebb03f0 commit a00d282

4 files changed

Lines changed: 19 additions & 1 deletion

File tree

‎cpp/ql/lib/semmle/code/cpp/Enum.qll‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ class Enum extends UserType, IntegralOrEnumType {
5555
not exists(UserType.super.getSize()) and result = 4
5656
}
5757

58+
override int getBitWidth() {
59+
result = UserType.super.getBitWidth()
60+
or
61+
not exists(UserType.super.getBitWidth()) and result = 32
62+
}
63+
5864
/** See `Type.isDeeplyConst` and `Type.isDeeplyConstBelow`. Internal. */
5965
override predicate isDeeplyConstBelow() { any() } // No subparts
6066

‎cpp/ql/lib/semmle/code/cpp/Type.qll‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,8 @@ class Decltype extends Type, NameQualifyingElement {
11891189

11901190
override int getSize() { result = this.getBaseType().getSize() }
11911191

1192+
override int getBitWidth() { result = this.getBaseType().getBitWidth() }
1193+
11921194
override int getAlignment() { result = this.getBaseType().getAlignment() }
11931195

11941196
override int getPointerIndirectionLevel() {
@@ -1249,6 +1251,8 @@ class TypeofType extends Type {
12491251

12501252
override int getSize() { result = this.getBaseType().getSize() }
12511253

1254+
override int getBitWidth() { result = this.getBaseType().getBitWidth() }
1255+
12521256
override int getAlignment() { result = this.getBaseType().getAlignment() }
12531257

12541258
override int getPointerIndirectionLevel() {
@@ -1394,6 +1398,8 @@ class IntrinsicTransformedType extends Type {
13941398

13951399
override int getSize() { result = this.getBaseType().getSize() }
13961400

1401+
override int getBitWidth() { result = this.getBaseType().getBitWidth() }
1402+
13971403
override int getAlignment() { result = this.getBaseType().getAlignment() }
13981404

13991405
override int getPointerIndirectionLevel() {
@@ -1519,6 +1525,8 @@ class SpecifiedType extends DerivedType {
15191525

15201526
override int getSize() { result = this.getBaseType().getSize() }
15211527

1528+
override int getBitWidth() { result = this.getBaseType().getBitWidth() }
1529+
15221530
override int getAlignment() { result = this.getBaseType().getAlignment() }
15231531

15241532
override int getPointerIndirectionLevel() {
@@ -1594,6 +1602,8 @@ class ArrayType extends DerivedType {
15941602
*/
15951603
override int getSize() { result = this.getByteSize() }
15961604

1605+
override int getBitWidth() { result = this.getByteSize() * 8 }
1606+
15971607
override string explain() {
15981608
if exists(this.getArraySize())
15991609
then

‎cpp/ql/lib/semmle/code/cpp/TypedefType.qll‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class TypedefType extends UserType {
2626

2727
override int getSize() { result = this.getBaseType().getSize() }
2828

29+
override int getBitWidth() { result = this.getBaseType().getBitWidth() }
30+
2931
override int getAlignment() { result = this.getBaseType().getAlignment() }
3032

3133
override int getPointerIndirectionLevel() {

‎cpp/ql/src/Likely Bugs/Conversion/ImplicitDowncastFromBitfield.ql‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ where
2121
else fct = va.getFullyConverted().getType()
2222
) and
2323
fi.getNumBits() > fct.getBitWidth() and
24-
va.getExplicitlyConverted().getType().getSize() > fct.getSize() and
24+
va.getExplicitlyConverted().getType().getBitWidth() > fct.getBitWidth() and
2525
va.getTarget() = fi and
2626
not fct.getUnspecifiedType() instanceof BoolType
2727
select va, "Implicit downcast of bitfield $@.", fi, fi.toString()

0 commit comments

Comments
 (0)