summaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
diff options
context:
space:
mode:
authorDmitry Yanovsky <kerambyte@gmail.com>2024-08-19 19:56:45 +0100
committerGitHub <noreply@github.com>2024-08-19 11:56:45 -0700
commit22b4496e86c32127e997f3e7385ef64d2d80cc4b (patch)
tree5f1fcf087ceefc24ef871d79a861ded460fd364d /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
parent92a8ec7abbd853e89556c7b942f30054273af9c6 (diff)
[ADT] Fix alignment check in unique_function constructor (#99403)
Right now the check fails for any state-capturing lambda since this expression - `alignof(decltype(StorageUnion.InlineStorage))` - returns 1 for the alignment value and not 4/8 as expected ([MSVC|Clang|GCC](https://godbolt.org/z/eTEdq4xjM)). So this check fails for pretty much any state-capturing callable we try to store into a `unique_function` and we take the out-of-line storage path: \llvm-project\llvm\include\llvm\ADT\FunctionExtras.h, `UniqueFunctionBase` constructor (line ~266): ``` if (sizeof(CallableT) > InlineStorageSize || alignof(CallableT) > alignof(decltype(StorageUnion.InlineStorage))) { // ... } ``` The fix is simply to use an explicit const variable to store the alignment value. There is no easy way to unit-test the fix since inline storage is considered to be an implementation detail so we shouldn't assume how the lambda ends up being stored.
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp')
0 files changed, 0 insertions, 0 deletions