Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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.
- Loading branch information