]> granicus.if.org Git - clang/commitdiff
[OpenCL] Add block argument CodeGen test
authorSven van Haastregt <sven.vanhaastregt@arm.com>
Tue, 2 Oct 2018 13:02:27 +0000 (13:02 +0000)
committerSven van Haastregt <sven.vanhaastregt@arm.com>
Tue, 2 Oct 2018 13:02:27 +0000 (13:02 +0000)
r326937 ("[OpenCL] Remove block invoke function from emitted block
literal struct", 2018-03-07) broke block argument handling.  In
particular the commit was causing a crash during code generation, see
the discussion in https://reviews.llvm.org/D43783 .

The offending commit has just been reverted; add a test to avoid
breaking this again in the future.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@343583 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGenOpenCL/blocks.cl

index 09b03ab5445131c6e33d3530f49ab1539331c19d..675240c6f05dc40c1fe9f8ac3e15ba217005a143 100644 (file)
@@ -78,6 +78,26 @@ void foo(){
 
 // COMMON-NOT: define{{.*}}@__foo_block_invoke_kernel
 
+// Test that we support block arguments.
+// COMMON-LABEL: define {{.*}} @blockArgFunc
+int blockArgFunc(int (^ bl)(void)) {
+  return bl();
+}
+
+// COMMON-LABEL: define {{.*}} @get21
+// COMMON: define {{.*}} @__get21_block_invoke
+// COMMON: ret i32 21
+int get21() {
+  return blockArgFunc(^{return 21;});
+}
+
+// COMMON-LABEL: define {{.*}} @get42
+// COMMON: define {{.*}} @__get42_block_invoke
+// COMMON: ret i32 42
+int get42() {
+  return blockArgFunc(^{return 42;});
+}
+
 // CHECK-DEBUG: !DIDerivedType(tag: DW_TAG_member, name: "__size"
 // CHECK-DEBUG: !DIDerivedType(tag: DW_TAG_member, name: "__align"