countPointers() always operates on canonical types
This avoids a bit of manual desugaring we're currently doing, and the obligation
to cover all sugar types in the future.
PiperOrigin-RevId: 502562793
diff --git a/nullability_verification/pointer_nullability_analysis.cc b/nullability_verification/pointer_nullability_analysis.cc
index b35fa76..fd73e18 100644
--- a/nullability_verification/pointer_nullability_analysis.cc
+++ b/nullability_verification/pointer_nullability_analysis.cc
@@ -107,14 +107,9 @@
unsigned getCount() { return count; }
- void Visit(QualType T) { TypeVisitor::Visit(T.getTypePtrOrNull()); }
-
- void VisitElaboratedType(const ElaboratedType* ET) {
- Visit(ET->getNamedType());
- }
-
- void VisitAttributedType(const AttributedType* AT) {
- Visit(AT->getModifiedType());
+ void Visit(QualType T) {
+ CHECK(T.isCanonical());
+ TypeVisitor::Visit(T.getTypePtrOrNull());
}
void VisitPointerType(const PointerType* PT) {
@@ -135,21 +130,17 @@
}
}
}
-
- void VisitTemplateSpecializationType(const TemplateSpecializationType* TST) {
- Visit(TST->desugar());
- }
};
unsigned countPointersInType(QualType T) {
CountPointersInTypeVisitor PointerCountVisitor;
- PointerCountVisitor.Visit(T);
+ PointerCountVisitor.Visit(T.getCanonicalType());
return PointerCountVisitor.getCount();
}
unsigned countPointersInType(TemplateArgument TA) {
if (TA.getKind() == TemplateArgument::Type) {
- return countPointersInType(TA.getAsType());
+ return countPointersInType(TA.getAsType().getCanonicalType());
}
return 0;
}