Поддерживаемые GNU __attribute__’ы¶
Warning
На данный момент документ находится в процессе написания и является неполным
В данном документе описываются только те __attribute__’ы, которые позаимствованы у gcc. Собственные builtin’ы описаны в статье Поддерживаемые MCST __attribute__’ы
Компилятор номинально совместим с gcc-11.3.0. Здесь мы перечислим ссылки на отдельные пункты из документации по gcc-11.3.0, посвящённые __attribute__’ам, и описанием того, что из всего множества поддержано в lcc
6.33.1 Common Function Attributes
Поддержано с ограничениями:
- access (access-mode, ref-index[, size-index])
- Атрибут игнорируется, проверка синтаксической и семантической корректности аргументов НЕ выполняется
- always_inline
- В режиме без оптимизаций атрибут игнорируется, т.к. в режиме без оптимизаций inline НЕ поддерживается
- optimize (string, …)
- Поддержаны только следующие опции:
-O0,-O1,-O2,-O3,-O4,-Og,-Ominimal,-Osize,-Ofast-faligned,-fno-aligned-fassociative-math,-fno-associative-math-fcx-limited-range,-fno-cx-limited-range-fext-strict-aliasing,-fno-ext-strict-aliasing-ffast(без-fstdlib)-ffast-math-ffinite-math-only,-fno-finite-math-only-fforce-inline-finline-to-small-functions-floop-apb-conditional-loads,-fno-loop-apb-conditional-loads-fmalloc-opt,-fno-malloc-opt-fmath-errno,-fno-math-errno-fprefetch,-fno-prefetch-frestrict-all-frestrict-params-frounding-math,-fno-rounding-math-fsignaling-nans,-fno-signaling-nans-fspec-fp,-fno-spec-fp-fstrict-aliasing,-fno-strict-aliasing-funsafe-math-optimizations,-fno-unsafe-math-optimizations-fgsr,-fno-gsr-fdce-fp,-fno-dce-fp-fint-divide-opt,-fno-int-divide-opt,-fno-use-memset,-fno-use-memcpyОпции, не попадающие в этот список, но являющиеся поддерживаемыми в компиляторе опциями,начинающимися на -f, молча игнорируются.Следует учитывать, что запуск lcc с опцией-O0и выставление атрибутаoptimize(-O0)в общем случае не дают эквивалентный код, поскольку в первом случае запускаетсянеоптимизирующий компилятор ecc, а вот втором случае запускается оптимизирующийкомпилятор ecf_opt, в котором атрибутoptimizeне влияет на работу межпроцедурных оптимизаций.Таким образом атрибутoptimize(-O0)не выключает всех оптимизаций, он выключаеттолько попроцедурные оптимизации. Аналогичное замечание касается также опций-O1…-O4;хотя в этом случае используется один и тот же компилятор ecf_opt, атрибутoptimize(-O*)не влияет на работу межпроцедурных оптимизаций, в отличие от опций lcc.
6.34.1 Common Variable Attributes
Поддержано с ограничениями:
- cleanup (cleanup_function)
- Поддержано только для языка C. Поддержан только вызов функции
cleanup_functionпри прямом выходе из функции. НЕ поддержан вызов функцииcleanup_functionпри прохождении исключения C++ через текущую функцию
