diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-07-25 17:59:29 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-07-25 17:59:29 +0000 |
commit | 930df11a0d00c467b17c76f2b782a96bf721599b (patch) | |
tree | ae52fcdfc3035a15d5a0e44ae5a162a29bf17bbc /lldb/packages/Python/lldbsuite/test/expression_command/timeout/TestCallWithTimeout.py | |
parent | baeab1fc442e2781d0d527f22b3ff4722a35f11c (diff) | |
download | bcm5719-llvm-930df11a0d00c467b17c76f2b782a96bf721599b.tar.gz bcm5719-llvm-930df11a0d00c467b17c76f2b782a96bf721599b.zip |
CodeGen: ensure placeholder instruction for cleanup is created
A placeholder instruction for use in generation of cleanup code for an
initializer list would not be emitted if the base class contained a
non-trivial destructor and the class contains no fields of its own. This
would be the case when using CTAD to deduce the template arguments for a
struct with an overloaded call operator, e.g.
```
template <class... Ts> struct ctad : Ts... {};
template <class... Ts> ctad(Ts...)->ctad<Ts...>;
```
and this class was initialized with a list of lambdas capturing by copy,
e.g.
```
ctad c {[s](short){}, [s](long){}};
```
In a release build the bug would manifest itself as a crash in the SROA
pass, however, in a debug build the following assert in CGCleanup.cpp
would fail:
```
assert(dominatingIP && "no existing variable and no dominating IP!");
```
By ensuring that a placeholder instruction is emitted even if there's no
fields in the class, neither the assert nor the crash is reproducible.
See https://bugs.llvm.org/show_bug.cgi?id=40771
Patch by Øystein Dale!
llvm-svn: 367042
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command/timeout/TestCallWithTimeout.py')
0 files changed, 0 insertions, 0 deletions