r228785 - PR21857: weaken an incorrect assertion.
Richard Smith
richard at metafoo.co.uk
Tue Feb 10 17:55:58 PST 2015
Seems like a reasonable candidate for branch: just turning an assertion
failure into proper handling of the relevant case.
On Tue, Feb 10, 2015 at 5:48 PM, Richard Smith <richard-llvm at metafoo.co.uk>
wrote:
> Author: rsmith
> Date: Tue Feb 10 19:48:47 2015
> New Revision: 228785
>
> URL: http://llvm.org/viewvc/llvm-project?rev=228785&view=rev
> Log:
> PR21857: weaken an incorrect assertion.
>
> Modified:
> cfe/trunk/lib/Sema/SemaLookup.cpp
> cfe/trunk/test/SemaCXX/lambda-expressions.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaLookup.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=228785&r1=228784&r2=228785&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaLookup.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaLookup.cpp Tue Feb 10 19:48:47 2015
> @@ -2503,8 +2503,18 @@ Sema::SpecialMemberOverloadResult *Sema:
> // will always be a (possibly implicit) declaration to shadow any
> others.
> OverloadCandidateSet OCS(RD->getLocation(),
> OverloadCandidateSet::CSK_Normal);
> DeclContext::lookup_result R = RD->lookup(Name);
> - assert(!R.empty() &&
> - "lookup for a constructor or assignment operator was empty");
> +
> + if (R.empty()) {
> + // We might have no default constructor because we have a lambda's
> closure
> + // type, rather than because there's some other declared constructor.
> + // Every class has a copy/move constructor, copy/move assignment, and
> + // destructor.
> + assert(SM == CXXDefaultConstructor &&
> + "lookup for a constructor or assignment operator was empty");
> + Result->setMethod(nullptr);
> + Result->setKind(SpecialMemberOverloadResult::NoMemberOrDeleted);
> + return Result;
> + }
>
> // Copy the candidates as our processing of them may load new
> declarations
> // from an external source and invalidate lookup_result.
>
> Modified: cfe/trunk/test/SemaCXX/lambda-expressions.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/lambda-expressions.cpp?rev=228785&r1=228784&r2=228785&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/SemaCXX/lambda-expressions.cpp (original)
> +++ cfe/trunk/test/SemaCXX/lambda-expressions.cpp Tue Feb 10 19:48:47 2015
> @@ -437,3 +437,12 @@ namespace error_in_transform_prototype {
> f(S()); // expected-note {{requested here}}
> }
> }
> +
> +namespace PR21857 {
> + template<typename Fn> struct fun : Fn {
> + fun() = default;
> + using Fn::operator();
> + };
> + template<typename Fn> fun<Fn> wrap(Fn fn);
> + auto x = wrap([](){});
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150210/9b0074da/attachment.html>
More information about the cfe-commits
mailing list