Skip to content

Commit eff1fba

Browse files
authored
Merge pull request #19805 from github/idrissrio/namespace-attributes
C++: fix typedef resolution in `ArrayType`
2 parents 7311d52 + 72559d5 commit eff1fba

File tree

5 files changed

+25
-0
lines changed

5 files changed

+25
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: fix
3+
---
4+
* `resolveTypedefs` now properly resolves typedefs for `ArrayType`s.

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,11 @@ class ArrayType extends DerivedType {
15891589
* Holds if this array is a variable-length array (VLA).
15901590
*/
15911591
predicate isVla() { type_is_vla(underlyingElement(this)) }
1592+
1593+
override Type resolveTypedefs() {
1594+
result.(ArrayType).getBaseType() = this.getBaseType().resolveTypedefs() and
1595+
result.(ArrayType).getArraySize() = this.getArraySize()
1596+
}
15921597
}
15931598

15941599
/**
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
typedef int int_t;
2+
int_t g1[10];
3+
int_t g2[2][4];
4+
5+
typedef float float_t;
6+
float_t arr1[5];
7+
float_t (*a_pointer)[10];
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
| file://:0:0:0:0 | float_t[5] | file://:0:0:0:0 | float[5] | ArrayTypedefs.cpp:6:9:6:12 | definition of arr1 |
2+
| file://:0:0:0:0 | float_t[10] | file://:0:0:0:0 | float[10] | ArrayTypedefs.cpp:7:11:7:19 | definition of a_pointer |
3+
| file://:0:0:0:0 | int_t[2][4] | file://:0:0:0:0 | int[2][4] | ArrayTypedefs.cpp:3:7:3:8 | definition of g2 |
4+
| file://:0:0:0:0 | int_t[4] | file://:0:0:0:0 | int[4] | ArrayTypedefs.cpp:3:7:3:8 | definition of g2 |
5+
| file://:0:0:0:0 | int_t[10] | file://:0:0:0:0 | int[10] | ArrayTypedefs.cpp:2:7:2:8 | definition of g1 |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import cpp
2+
3+
from ArrayType type
4+
select type, type.resolveTypedefs(), type.getATypeNameUse()

0 commit comments

Comments
 (0)