Author: rsmith Date: Thu Aug 2 13:30:52 2018 New Revision: 338766 URL: http://llvm.org/viewvc/llvm-project?rev=338766&view=rev Log: Fix assertion failure when emitting code for a merged lambda.
Modified: cfe/trunk/lib/AST/DeclCXX.cpp cfe/trunk/test/Modules/merge-lambdas.cpp Modified: cfe/trunk/lib/AST/DeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=338766&r1=338765&r2=338766&view=diff ============================================================================== --- cfe/trunk/lib/AST/DeclCXX.cpp (original) +++ cfe/trunk/lib/AST/DeclCXX.cpp Thu Aug 2 13:30:52 2018 @@ -1327,6 +1327,15 @@ bool CXXRecordDecl::isGenericLambda() co return getLambdaData().IsGenericLambda; } +#ifndef NDEBUG +static bool allLookupResultsAreTheSame(const DeclContext::lookup_result &R) { + for (auto *D : R) + if (!declaresSameEntity(D, R.front())) + return false; + return true; +} +#endif + CXXMethodDecl* CXXRecordDecl::getLambdaCallOperator() const { if (!isLambda()) return nullptr; DeclarationName Name = @@ -1334,7 +1343,8 @@ CXXMethodDecl* CXXRecordDecl::getLambdaC DeclContext::lookup_result Calls = lookup(Name); assert(!Calls.empty() && "Missing lambda call operator!"); - assert(Calls.size() == 1 && "More than one lambda call operator!"); + assert(allLookupResultsAreTheSame(Calls) && + "More than one lambda call operator!"); NamedDecl *CallOp = Calls.front(); if (const auto *CallOpTmpl = dyn_cast<FunctionTemplateDecl>(CallOp)) @@ -1349,7 +1359,8 @@ CXXMethodDecl* CXXRecordDecl::getLambdaS &getASTContext().Idents.get(getLambdaStaticInvokerName()); DeclContext::lookup_result Invoker = lookup(Name); if (Invoker.empty()) return nullptr; - assert(Invoker.size() == 1 && "More than one static invoker operator!"); + assert(allLookupResultsAreTheSame(Invoker) && + "More than one static invoker operator!"); NamedDecl *InvokerFun = Invoker.front(); if (const auto *InvokerTemplate = dyn_cast<FunctionTemplateDecl>(InvokerFun)) return cast<CXXMethodDecl>(InvokerTemplate->getTemplatedDecl()); Modified: cfe/trunk/test/Modules/merge-lambdas.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-lambdas.cpp?rev=338766&r1=338765&r2=338766&view=diff ============================================================================== --- cfe/trunk/test/Modules/merge-lambdas.cpp (original) +++ cfe/trunk/test/Modules/merge-lambdas.cpp Thu Aug 2 13:30:52 2018 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fmodules -verify %s +// RUN: %clang_cc1 -fmodules -verify %s -emit-llvm-only // expected-no-diagnostics #pragma clang module build A _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits