dbms: fixed compiler, added test [#METR-2944].

This commit is contained in:
Alexey Milovidov 2015-04-01 07:14:15 +03:00
parent 7acee77529
commit 666c154e5d

View File

@ -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(); };