diff options
author | JF Bastien <jfbastien@apple.com> | 2019-02-08 01:29:17 +0000 |
---|---|---|
committer | JF Bastien <jfbastien@apple.com> | 2019-02-08 01:29:17 +0000 |
commit | b347e752580961136913f7e076befd8e83d02cb7 (patch) | |
tree | c85b1c97d26b009c9c320960df2ebdaec76589f2 /llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp | |
parent | 0719b3527f5bc550d3677161ca49a0e6d462c9e1 (diff) | |
download | bcm5719-llvm-b347e752580961136913f7e076befd8e83d02cb7.tar.gz bcm5719-llvm-b347e752580961136913f7e076befd8e83d02cb7.zip |
Variable auto-init: fix __block initialization
Summary:
Automatic initialization [1] of __block variables was trampling over the block's
headers after they'd been initialized, which caused self-init usage to crash,
such as here:
typedef struct XYZ { void (^block)(); } *xyz_t;
__attribute__((noinline))
xyz_t create(void (^block)()) {
xyz_t myself = malloc(sizeof(struct XYZ));
myself->block = block;
return myself;
}
int main() {
__block xyz_t captured = create(^(){ (void)captured; });
}
This type of code shouldn't be broken by variable auto-init, even if it's
sketchy.
[1] With -ftrivial-auto-var-init=pattern
<rdar://problem/47798396>
Reviewers: rjmccall, pcc, kcc
Subscribers: jkorous, dexonsmith, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D57797
llvm-svn: 353495
Diffstat (limited to 'llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions