Skip to content

Commit 042f484

Browse files
sudo-pandavgvassilev
authored andcommitted
Resolve typedefs before extracting dimensions
1 parent 0ec4c22 commit 042f484

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

lib/Interpreter/CppInterOp.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,6 +2713,9 @@ namespace Cpp {
27132713
std::vector<long int> GetDimensions(TCppType_t type)
27142714
{
27152715
QualType Qual = QualType::getFromOpaquePtr(type);
2716+
if (Qual.isNull())
2717+
return {};
2718+
Qual = Qual.getCanonicalType();
27162719
std::vector<long int> dims;
27172720
if (Qual->isArrayType())
27182721
{

unittests/CppInterOp/TypeReflectionTest.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,12 @@ TEST(TypeReflectionTest, GetDimensions) {
393393
struct S2 {
394394
char ch[][3][4];
395395
};
396+
397+
template <typename T>
398+
struct S3 {
399+
typedef T type;
400+
};
401+
S3<int[6]>::type arr;
396402
)";
397403

398404
GetAllTopLevelDecls(code, Decls);
@@ -454,6 +460,15 @@ TEST(TypeReflectionTest, GetDimensions) {
454460
{
455461
EXPECT_EQ(dims[i], truth_dims[i]);
456462
}
463+
464+
// Variable arr
465+
dims = Cpp::GetDimensions(Cpp::GetVariableType(Decls[7]));
466+
truth_dims = std::vector<long int>({6});
467+
EXPECT_EQ(dims.size(), truth_dims.size());
468+
for (unsigned i = 0; i < truth_dims.size() && i < dims.size(); i++)
469+
{
470+
EXPECT_EQ(dims[i], truth_dims[i]);
471+
}
457472
}
458473

459474
TEST(TypeReflectionTest, IsPODType) {

0 commit comments

Comments
 (0)