LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

Я разобрался, почему AC_COMPUTE_INT, который делает тест в духе того что @firkax написал, сыпался.

У меня тут слегка кастомная libc и там offsetof() был задан макросом #define offsetof(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)).

GCC почему-то считает, что результат этого не является константным выражением и генерит код с VLA, который сыпется и не может. При замене макроса на #define offsetof(TYPE, ELEM) __builtin_offsetof(TYPE, ELEM) всё магически заработало.

Честно говоря, я до сих пор в шоке от того, каким же чудовищным говноязыком является этот ваш Си и что в нём нельзя просто получить статические данные без разрыва жопы.

Исходная версия hateyoufeel, :

Я разобрался, почему AC_COMPUTE_INT, который делает тест в душе того что @firkax написал, сыпался.

У меня тут слегка кастомная libc и там offsetof() был задан макросом #define offsetof(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)).

GCC почему-то считает, что результат этого не является константным выражением и генерит код с VLA, который сыпется и не может. При замене макроса на #define offsetof(TYPE, ELEM) __builtin_offsetof(TYPE, ELEM) всё магически заработало.

Честно говоря, я до сих пор в шоке от того, каким же чудовищным говноязыком является этот ваш Си и что в нём нельзя просто получить статические данные без разрыва жопы.