r181598 - Codegen tests for captured statements with templates

Jordan Rose jordan_rose at apple.com
Fri May 10 09:13:24 PDT 2013


This isn't your fault, but is there any way we can avoid checking these separately? It seems silly to spin up N FileChecks to check N function bodies.

Maybe this is a more general problem in our tests, but I can't help thinking it'd be nice if we had a flag that guaranteed input-source-order output of LLVM IR.

Jordan


On May 10, 2013, at 7:15 , Wei Pan <wei.pan at intel.com> wrote:

> Author: wpan
> Date: Fri May 10 09:15:18 2013
> New Revision: 181598
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=181598&view=rev
> Log:
> Codegen tests for captured statements with templates
> 
> Differential-revision: llvm-reviews.chandlerc.com/D778
> 
> 
> Modified:
>    cfe/trunk/test/CodeGenCXX/captured-statements.cpp
> 
> Modified: cfe/trunk/test/CodeGenCXX/captured-statements.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/captured-statements.cpp?rev=181598&r1=181597&r2=181598&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/captured-statements.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/captured-statements.cpp Fri May 10 09:15:18 2013
> @@ -3,6 +3,8 @@
> // RUN: FileCheck %s -input-file=%t -check-prefix=CHECK-2
> // RUN: FileCheck %s -input-file=%t -check-prefix=CHECK-3
> // RUN: FileCheck %s -input-file=%t -check-prefix=CHECK-4
> +// RUN: FileCheck %s -input-file=%t -check-prefix=CHECK-5
> +// RUN: FileCheck %s -input-file=%t -check-prefix=CHECK-6
> 
> struct Foo {
>   int x;
> @@ -95,3 +97,81 @@ void test4() {
>   // CHECK-4:   store i32 5, i32*
>   // CHECK-4:   call {{.*}}FooD1Ev
> }
> +
> +template <typename T, int id>
> +void touch(const T &) {}
> +
> +template <typename T, unsigned id>
> +void template_capture_var() {
> +  T x;
> +  #pragma clang __debug captured
> +  {
> +    touch<T, id>(x);
> +  }
> +}
> +
> +template <typename T, int id>
> +class Val {
> +  T v;
> +public:
> +  void set() {
> +    #pragma clang __debug captured
> +    {
> +      touch<T, id>(v);
> +    }
> +  }
> +
> +  template <typename U, int id2>
> +  void foo(U u) {
> +    #pragma clang __debug captured
> +    {
> +      touch<U, id + id2>(u);
> +    }
> +  }
> +};
> +
> +void test_capture_var() {
> +  // CHECK-5: define {{.*}} void @_Z20template_capture_varIiLj201EEvv
> +  // CHECK-5-NOT: }
> +  // CHECK-5: store i32*
> +  // CHECK-5: call void @__captured_stmt
> +  // CHECK-5-NEXT: ret void
> +  template_capture_var<int, 201>();
> +
> +  // CHECK-5: define {{.*}} void @_ZN3ValIfLi202EE3setEv
> +  // CHECK-5-NOT: }
> +  // CHECK-5: store %class.Val*
> +  // CHECK-5: call void @__captured_stmt
> +  // CHECK-5-NEXT: ret void
> +  Val<float, 202> Obj;
> +  Obj.set();
> +
> +  // CHECK-5: define {{.*}} void @_ZN3ValIfLi202EE3fooIdLi203EEEvT_
> +  // CHECK-5-NOT: }
> +  // CHECK-5: store %class.Val*
> +  // CHECK-5: store double
> +  // CHECK-5: call void @__captured_stmt
> +  // CHECK-5-NEXT: ret void
> +  Obj.foo<double, 203>(1.0);
> +}
> +
> +template <typename T>
> +void template_capture_lambda() {
> +  T x, y;
> +  [=, &y]() {
> +    #pragma clang __debug captured
> +    {
> +      y += x;
> +    }
> +  }();
> +}
> +
> +void test_capture_lambda() {
> +  // CHECK-6: define {{.*}} void @_ZZ23template_capture_lambdaIiEvvENKS_IiEUlvE_clEv
> +  // CHECK-6-NOT: }
> +  // CHECK-6: store i32*
> +  // CHECK-6: store i32*
> +  // CHECK-6: call void @__captured_stmt
> +  // CHECK-6-NEXT: ret void
> +  template_capture_lambda<int>();
> +}
> 
> 
> _______________________________________________
> 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