shafik created this revision. shafik added reviewers: aprantl, dblaikie, probinson. Herald added a project: All. shafik requested review of this revision.
D70524 <https://reviews.llvm.org/D70524> added support for auto return types for C++ member functions. I was implementing support on the LLDB side for looking up the deduced type. I ran into trouble with some cases with respect to lambdas. I looked into how gcc was handling these cases and it appears gcc emits the deduced return type for lambdas. So I am changing out behavior to match that. https://reviews.llvm.org/D123319 Files: clang/lib/CodeGen/CGDebugInfo.cpp Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -1678,8 +1678,14 @@ SmallVector<llvm::Metadata *, 16> Elts; // First element is always return type. For 'void' functions it is NULL. QualType temp = Func->getReturnType(); - if (temp->getTypeClass() == Type::Auto && decl) - Elts.push_back(CreateType(cast<AutoType>(temp))); + if (temp->getTypeClass() == Type::Auto && decl) { + const AutoType *AT = cast<AutoType>(temp); + + if (AT->isDeduced() && ThisPtr->getPointeeCXXRecordDecl()->isLambda()) + Elts.push_back(getOrCreateType(AT->getDeducedType(),Unit)); + else + Elts.push_back(CreateType(AT)); + } else Elts.push_back(Args[0]);
Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -1678,8 +1678,14 @@ SmallVector<llvm::Metadata *, 16> Elts; // First element is always return type. For 'void' functions it is NULL. QualType temp = Func->getReturnType(); - if (temp->getTypeClass() == Type::Auto && decl) - Elts.push_back(CreateType(cast<AutoType>(temp))); + if (temp->getTypeClass() == Type::Auto && decl) { + const AutoType *AT = cast<AutoType>(temp); + + if (AT->isDeduced() && ThisPtr->getPointeeCXXRecordDecl()->isLambda()) + Elts.push_back(getOrCreateType(AT->getDeducedType(),Unit)); + else + Elts.push_back(CreateType(AT)); + } else Elts.push_back(Args[0]);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits