asavonic wrote: Thanks a lot @jplehr and @DKLoehr for helping with reproducers, and @erichkeane for taking care of the revert.
The compiler trips on `LinkageComputer::computeTypeLinkageInfo` for `case Type::MemberPointer`, where only `CXXRecord` is expected, it seems. We get a `FunctionProtoType` instead, so `getMostRecentCXXRecordDecl` returns NULL: ``` MemberPointerType 0x55555571ea90 'type-parameter-0-0 (type-parameter-0-1::*)(void)' dependent |-TemplateTypeParmType 0x5555556f73b0 'type-parameter-0-1' dependent depth 0 index 1 `-FunctionProtoType 0x55555571e9e0 'type-parameter-0-0 (void)' dependent cdecl `-TemplateTypeParmType 0x5555556f7630 'type-parameter-0-0' dependent depth 0 index 0 ``` I'll figure out what to do with this case and send a new patch. The following helps to bypass the error, but perhaps we need to do something else for function types here. ```diff diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 42e94d66d1a1..28a5fdc4c3a8 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -4746,8 +4746,10 @@ LinkageInfo LinkageComputer::computeTypeLinkageInfo(const Type *T) { return computeTypeLinkageInfo(cast<ReferenceType>(T)->getPointeeType()); case Type::MemberPointer: { const auto *MPT = cast<MemberPointerType>(T); - LinkageInfo LV = - getDeclLinkageAndVisibility(MPT->getMostRecentCXXRecordDecl()); + LinkageInfo LV; + if (CXXRecordDecl *D = MPT->getMostRecentCXXRecordDecl()) { + LV.merge(getDeclLinkageAndVisibility(D)); + } LV.merge(computeTypeLinkageInfo(MPT->getPointeeType())); return LV; } ``` https://github.com/llvm/llvm-project/pull/136128 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits