https://github.com/Ameya674 created https://github.com/llvm/llvm-project/pull/144828
The compiler tends to crash when encountering a forward-declared incomplete type in Sema::LookupSpecialMember. Fixed this by adding a check to handle the incomplete types. The patch compiles and clang triggers the correct error message. >From fcecc8b3ee649c735cff33ab544c4abcff282658 Mon Sep 17 00:00:00 2001 From: "Ameya Madhav Gurjar (Student)" <ASUAD\agurj...@en4230612l.fulton.ad.asu.edu> Date: Wed, 18 Jun 2025 19:24:17 -0700 Subject: [PATCH] Fix crash when doing special member lookup on forward-declared classes --- clang/lib/Sema/SemaLookup.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index 5ad9dd8ed0d3e..bf114e5c9f996 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -3382,8 +3382,29 @@ Sema::SpecialMemberOverloadResult Sema::LookupSpecialMember(CXXRecordDecl *RD, CXXSpecialMemberKind SM, bool ConstArg, bool VolatileArg, bool RValueThis, bool ConstThis, bool VolatileThis) { - assert(CanDeclareSpecialMemberFunction(RD) && - "doing special member lookup into record that isn't fully complete"); + + if (!CanDeclareSpecialMemberFunction(RD)) { + + llvm::FoldingSetNodeID ID; + ID.AddPointer(RD); + ID.AddInteger(llvm::to_underlying(SM)); + ID.AddInteger(ConstArg); + ID.AddInteger(VolatileArg); + ID.AddInteger(RValueThis); + ID.AddInteger(ConstThis); + ID.AddInteger(VolatileThis); + void *InsertPoint; + + SpecialMemberOverloadResultEntry* Result = BumpAlloc.Allocate<SpecialMemberOverloadResultEntry>(); + Result = new (Result) SpecialMemberOverloadResultEntry(ID); + Result->setMethod(nullptr); + Result->setKind(SpecialMemberOverloadResult::NoMemberOrDeleted); + SpecialMemberCache.InsertNode(Result, InsertPoint); + return *Result; + } + + // assert(CanDeclareSpecialMemberFunction(RD) && + // "doing special member lookup into record that isn't fully complete"); RD = RD->getDefinition(); if (RValueThis || ConstThis || VolatileThis) assert((SM == CXXSpecialMemberKind::CopyAssignment || _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits