diff options
Diffstat (limited to 'dynamic-layers/clang-layer/recipes-devtools/clang/files/0003-OpenCL-Fix-assertion-due-to-blocks.patch')
-rw-r--r-- | dynamic-layers/clang-layer/recipes-devtools/clang/files/0003-OpenCL-Fix-assertion-due-to-blocks.patch | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/dynamic-layers/clang-layer/recipes-devtools/clang/files/0003-OpenCL-Fix-assertion-due-to-blocks.patch b/dynamic-layers/clang-layer/recipes-devtools/clang/files/0003-OpenCL-Fix-assertion-due-to-blocks.patch deleted file mode 100644 index 510c7c6e..00000000 --- a/dynamic-layers/clang-layer/recipes-devtools/clang/files/0003-OpenCL-Fix-assertion-due-to-blocks.patch +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | From 29e2813a2ab7d5569860bb07892dfef7b5374d96 Mon Sep 17 00:00:00 2001 | ||
2 | From: Yaxun Liu <Yaxun.Liu@amd.com> | ||
3 | Date: Tue, 26 Feb 2019 16:20:41 +0000 | ||
4 | Subject: [PATCH] [OpenCL] Fix assertion due to blocks | ||
5 | |||
6 | A recent change caused assertion in CodeGenFunction::EmitBlockCallExpr when a block is called. | ||
7 | |||
8 | There is code | ||
9 | |||
10 | Func = CGM.getOpenCLRuntime().getInvokeFunction(E->getCallee()); | ||
11 | getCalleeDecl calls Expr::getReferencedDeclOfCallee, which does not handle | ||
12 | BlockExpr and returns nullptr, which causes isa to assert. | ||
13 | |||
14 | This patch fixes that. | ||
15 | |||
16 | Differential Revision: https://reviews.llvm.org/D58658 | ||
17 | |||
18 | |||
19 | git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@354893 91177308-0d34-0410-b5e6-96231b3b80d8 | ||
20 | |||
21 | Upstream-Status: Backport | ||
22 | [https://github.com/llvm-mirror/clang/commit/29e2813a2ab7d5569860bb07892dfef7b5374d96] | ||
23 | Signed-off-by: Anuj Mittal <anuj.mittal@intel.com> | ||
24 | --- | ||
25 | lib/AST/Expr.cpp | 2 ++ | ||
26 | test/CodeGenOpenCL/blocks.cl | 6 ++++++ | ||
27 | 2 files changed, 8 insertions(+) | ||
28 | |||
29 | diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp | ||
30 | index aef1eab..85690c7 100644 | ||
31 | --- a/lib/AST/Expr.cpp | ||
32 | +++ b/lib/AST/Expr.cpp | ||
33 | @@ -1358,6 +1358,8 @@ Decl *Expr::getReferencedDeclOfCallee() { | ||
34 | return DRE->getDecl(); | ||
35 | if (MemberExpr *ME = dyn_cast<MemberExpr>(CEE)) | ||
36 | return ME->getMemberDecl(); | ||
37 | + if (auto *BE = dyn_cast<BlockExpr>(CEE)) | ||
38 | + return BE->getBlockDecl(); | ||
39 | |||
40 | return nullptr; | ||
41 | } | ||
42 | diff --git a/test/CodeGenOpenCL/blocks.cl b/test/CodeGenOpenCL/blocks.cl | ||
43 | index ab5a2c6..c3e2685 100644 | ||
44 | --- a/test/CodeGenOpenCL/blocks.cl | ||
45 | +++ b/test/CodeGenOpenCL/blocks.cl | ||
46 | @@ -90,6 +90,12 @@ int get42() { | ||
47 | return blockArgFunc(^{return 42;}); | ||
48 | } | ||
49 | |||
50 | +// COMMON-LABEL: define {{.*}}@call_block | ||
51 | +// call {{.*}}@__call_block_block_invoke | ||
52 | +int call_block() { | ||
53 | + return ^int(int num) { return num; } (11); | ||
54 | +} | ||
55 | + | ||
56 | // CHECK-DEBUG: !DIDerivedType(tag: DW_TAG_member, name: "__size" | ||
57 | // CHECK-DEBUG: !DIDerivedType(tag: DW_TAG_member, name: "__align" | ||
58 | |||
59 | -- | ||
60 | 1.8.3.1 | ||
61 | |||