summaryrefslogtreecommitdiffstats
path: root/llvm/include/llvm-c
diff options
context:
space:
mode:
authorBrian Gesiak <modocache@gmail.com>2018-04-01 23:55:21 +0000
committerBrian Gesiak <modocache@gmail.com>2018-04-01 23:55:21 +0000
commit91a4b5af3a1f12c2a664faaef59fcf8eb86b1087 (patch)
treeaf90684e9be94e71e324a2f6a19cd88a219e3ede /llvm/include/llvm-c
parent934e5d54369fbac3b78ee252a5178580b589d5fd (diff)
downloadbcm5719-llvm-91a4b5af3a1f12c2a664faaef59fcf8eb86b1087.tar.gz
bcm5719-llvm-91a4b5af3a1f12c2a664faaef59fcf8eb86b1087.zip
[Coroutines] Schedule coro-split before asan
Summary: The docs for the LLVM coroutines intrinsic `@llvm.coro.id` state that "The second argument, if not null, designates a particular alloca instruction to be a coroutine promise." However, if the address sanitizer pass is run before the `@llvm.coro.id` intrinsic is lowered, the `alloca` instruction passed to the intrinsic as its second argument is converted, as per the https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm docs, to an `inttoptr` instruction that accesses the address of the promise. On optimization levels `-O1` and above, the `-asan` pass is run after `-coro-early`, `-coro-split`, and `-coro-elide`, and before `-coro-cleanup`, and so there is no issue. At `-O0`, however, `-asan` is run in between `-coro-early` and `-coro-split`, which causes an assertion to be hit when the `inttoptr` instruction is forcibly cast to an `alloca`. Rearrange the passes such that the coroutine passes are registered before the sanitizer passes. Test Plan: Compile a simple C++ program that uses coroutines in `-O0` with `-fsanitize-address`, and confirm no assertion is hit: `clang++ coro-example.cpp -fcoroutines-ts -g -fsanitize=address -fno-omit-frame-pointer`. Reviewers: GorNishanov, lewissbaker, EricWF Reviewed By: GorNishanov Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D43927 llvm-svn: 328951
Diffstat (limited to 'llvm/include/llvm-c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud