В настоящее время продолжается процесс установки исправлений LLVMLinux в ядро vanilla (2013-2014).
LLVMLinux - проект Linux Foundation: http://llvm.linuxfoundation.org/, позволяющий собирать ванильное ядро с помощью LLVM. Многие патчи подготовлены Беханом Вебстером, руководителем проекта LLVMLinux.
В мае 2013 года появилась статья о проекте LWN.
https://lwn.net/Articles/549203/ "LFCS: проект LLVMLinux"
Текущее состояние проекта LLVMLinux отслеживается на странице http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues
Вещи (в основном gcc-isms) уже удалены из ядра:
* Переменные регистров Expicit (не C99)
* VLAIS (несовместимая с C99 недокументированная функция GCC «Массивы переменной длины в структурах»), например struct S { int array[N];}
или даже struct S { int array[N]; int array_usb_gadget[M]; }
, где N и M - аргумент непостоянной функции
* Вложенные функции (функция Ada, портированная на C разработчиками GCC / Gnat; не разрешена в C99)
* Некоторая магия gcc / gas, например, специальные сегменты или макро
Что нужно сделать:
* Использование __builtin_constant_p
встроенного для реализации страшной магии, такой как BUILD_BUG_ON(!__builtin_constant_p(offset));
Хорошей новостью о LLVMLinux является то, что после его исправлений ядро не только становится компилируемым с помощью LLVM + clang, но и легче компилируется другими компиляторами, не относящимися к GCC, поскольку проект убивает не код C99, такой как VLAIS, созданный usb-гаджетом автор хакерами netfilter и хакерами криптоподсистемы; убиты также вложенные функции.