diff options
author | Heejin Ahn <aheejin@gmail.com> | 2019-03-16 05:39:12 +0000 |
---|---|---|
committer | Heejin Ahn <aheejin@gmail.com> | 2019-03-16 05:39:12 +0000 |
commit | 7e66a50bb40fea8341306b0d0edaccfad1350606 (patch) | |
tree | 9363fec17d24ac0569991576f5d61b296e0839aa /clang/test/CodeGen/builtins-wasm.c | |
parent | 66ce419468ced9196d9e6586eea6522744ae184d (diff) | |
download | bcm5719-llvm-7e66a50bb40fea8341306b0d0edaccfad1350606.tar.gz bcm5719-llvm-7e66a50bb40fea8341306b0d0edaccfad1350606.zip |
[WebAssembly] Use rethrow intrinsic in the rethrow block
Summary:
Because in wasm we merge all catch clauses into one big catchpad, in
case none of the types in catch handlers matches after we test against
each of them, we should unwind to the next EH enclosing scope. For this,
we should NOT use a call to `__cxa_rethrow` but rather a call to our own
rethrow intrinsic, because what we're trying to do here is just to
transfer the control flow into the next enclosing EH pad (or the
caller). Calls to `__cxa_rethrow` should only be used after a call to
`__cxa_begin_catch`.
Reviewers: dschuff
Subscribers: sbc100, jgravelle-google, sunfish, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D59353
llvm-svn: 356317
Diffstat (limited to 'clang/test/CodeGen/builtins-wasm.c')
-rw-r--r-- | clang/test/CodeGen/builtins-wasm.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/test/CodeGen/builtins-wasm.c b/clang/test/CodeGen/builtins-wasm.c index bba615d3a2d..3c5db7268d2 100644 --- a/clang/test/CodeGen/builtins-wasm.c +++ b/clang/test/CodeGen/builtins-wasm.c @@ -44,10 +44,10 @@ void throw(unsigned int tag, void *obj) { // WEBASSEMBLY64: call void @llvm.wasm.throw(i32 %{{.*}}, i8* %{{.*}}) } -void rethrow(void) { - return __builtin_wasm_rethrow(); - // WEBASSEMBLY32: call void @llvm.wasm.rethrow() - // WEBASSEMBLY64: call void @llvm.wasm.rethrow() +void rethrow_in_catch(void) { + return __builtin_wasm_rethrow_in_catch(); + // WEBASSEMBLY32: call void @llvm.wasm.rethrow.in.catch() + // WEBASSEMBLY64: call void @llvm.wasm.rethrow.in.catch() } int atomic_wait_i32(int *addr, int expected, long long timeout) { |