[cfe-commits] r170160 - in /cfe/trunk: lib/CodeGen/CGClass.cpp test/CodeGenCXX/lambda-expressions.cpp

NAKAMURA Takumi geek4civic at gmail.com
Thu Dec 13 16:29:32 PST 2012


Eli, it fails in -Asserts build. Not sure why.

define internal void @"_ZZ1hvEN3$_78__invokeEv"(%struct.A* noalias
sret %agg.result) inlinehint align 2 {
  call void @"_ZZ1hvENK3$_7clEv"(%struct.A* sret %agg.result,
%class.anon.8* undef)
  call void @llvm.trap()
  unreachable
                                                  ; No predecessors!
  ret void
}


2012/12/14 Eli Friedman <eli.friedman at gmail.com>:
> Author: efriedma
> Date: Thu Dec 13 17:37:17 2012
> New Revision: 170160
>
> URL: http://llvm.org/viewvc/llvm-project?rev=170160&view=rev
> Log:
> Make sure the __invoke function for lambdas returns properly.  Per bug report on IRC>
>
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGClass.cpp
>     cfe/trunk/test/CodeGenCXX/lambda-expressions.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=170160&r1=170159&r2=170160&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Thu Dec 13 17:37:17 2012
> @@ -1787,6 +1787,8 @@
>    // If necessary, copy the returned value into the slot.
>    if (!resultType->isVoidType() && returnSlot.isNull())
>      EmitReturnOfRValue(RV, resultType);
> +  else
> +    EmitBranchThroughCleanup(ReturnBlock);
>  }
>
>  void CodeGenFunction::EmitLambdaBlockInvokeBody() {
>
> Modified: cfe/trunk/test/CodeGenCXX/lambda-expressions.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/lambda-expressions.cpp?rev=170160&r1=170159&r2=170160&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/lambda-expressions.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/lambda-expressions.cpp Thu Dec 13 17:37:17 2012
> @@ -80,6 +80,15 @@
>    return [] { return r; } ();
>  };
>
> +// CHECK: define internal void @"_ZZ1hvEN3$_78__invokeEv"(%struct.A* noalias sret %agg.result)
> +// CHECK-NEXT: entry:
> +// CHECK-NEXT: call void @"_ZZ1hvENK3$_7clEv"(%struct.A* sret %agg.result,
> +// CHECK-NEXT: ret void
> +struct A { ~A(); };
> +void h() {
> +  A (*h)() = [] { return A(); };
> +}
> +
>  // CHECK: define internal i32 @"_ZZ1fvEN3$_58__invokeEii"
>  // CHECK: store i32
>  // CHECK-NEXT: store i32
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list