================ @@ -133,8 +133,8 @@ TemplateName getReferencedTemplateName(const Type *T) { CXXRecordDecl *HeuristicResolverImpl::resolveTypeToRecordDecl(const Type *T) { assert(T); - // Unwrap type sugar such as type aliases. - T = T->getCanonicalTypeInternal().getTypePtr(); + // Unwrap references and type sugar such as type aliases. + T = T->getCanonicalTypeInternal().getNonReferenceType().getTypePtr(); ---------------- HighCommander4 wrote:
No, the pointer case is a bit more involved because we bail [here](https://searchfox.org/llvm/rev/8035d38daab028b8da3cf2b01090b5f0ceacd695/clang/lib/Sema/HeuristicResolver.cpp#236) after failing to unwrap the pointee type [here](https://searchfox.org/llvm/rev/8035d38daab028b8da3cf2b01090b5f0ceacd695/clang/lib/Sema/HeuristicResolver.cpp#233). To handle it we will need to do something like: 1. Check for pointer type and unwrap it if found 2. Resolve `BuiltinType::Dependent` 3. If a pointer type was not unwrapped at step (1), check for it again after step (2) and unwrap it if found I was going to do this in a follow-up patch but it might make more sense to do it in the same patch; I will revise. https://github.com/llvm/llvm-project/pull/124451 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits