mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-22 01:30:51 +00:00
dbms: fixed compiler, added test [#METR-2944].
This commit is contained in:
parent
7acee77529
commit
666c154e5d
@ -284,3 +284,27 @@ void NO_INLINE Aggregator::executeSpecializedWithoutKey(
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** Основной код компилируется с помощью gcc 4.9.
|
||||
* Но SpecializedAggregator компилируется с помощью clang 3.6 в .so-файл.
|
||||
* Это делается потому что gcc не удаётся заставить инлайнить функции,
|
||||
* которые были девиртуализированы, в конкретном случае, и производительность получается ниже.
|
||||
* А также clang проще распространять для выкладки на серверы.
|
||||
*
|
||||
* После перехода с gcc 4.8 и gnu++1x на gcc 4.9 и gnu++1y,
|
||||
* при dlopen стала возникать ошибка: undefined symbol: __cxa_pure_virtual
|
||||
*
|
||||
* Скорее всего, это происходит из-за изменившейся версии этого символа:
|
||||
* gcc создаёт в .so символ
|
||||
* U __cxa_pure_virtual@@CXXABI_1.3
|
||||
* а clang создаёт символ
|
||||
* U __cxa_pure_virtual
|
||||
*
|
||||
* Но нам не принципиально, как будет реализована функция __cxa_pure_virtual,
|
||||
* потому что она не вызывается при нормальной работе программы,
|
||||
* а если вызывается - то программа и так гарантированно глючит.
|
||||
*
|
||||
* Поэтому, мы можем обойти проблему таким образом:
|
||||
*/
|
||||
extern "C" void __attribute__((__visibility__("default"), __noreturn__)) __cxa_pure_virtual() { abort(); };
|
||||
|
Loading…
Reference in New Issue
Block a user