• C programmin блин си сегодня отстрелило мне ноги. В общем как может быть такое, что при убирании inline у static void функции все неожиданно ломается (мусор в структуре данных, в итоге segfault), gdb не отловить, т.к. мусор там появляется непонятно когда, во всяком случае пишут туда не мусор.
    Если есть inline — то все хорошо.
    ♡ recommended by @O01eg

Replies (11)

  • @qnikst, Баг в компиляторе мейнстримного языка программирования?
  • @segfault, Да не, бред какой то.
  • @segfault, похоже, что баг в коде какой-то есть скорее всего ghc-шном, но у меня вообще нету идей какой
  • @qnikst, У меня от твоего ответа повис pidgin (я серьезно). Он кстати тоже на си написан.
  • @qnikst, stack overflow?
  • @L29Ah, не просто кривой код оказался, раньше работало случайно (или это тонкая недокументированная оптимизация была)
  • @qnikst, inline функции оптимизируются компилятором. Если убрать inline, появляются все эти обычные манипуляции при вызове функции, типа запихивании аргументов в стек, передачи управления и т.д. И оптимизация пропадает, либо заменяется на другую, вот у тебя все и идет по пизде.
  • @IRT, оптимизация не должна приводить к изменению семантики, не?
  • @qnikst, Оптимизация может привести к чему угодно, современные компиляторы дофига умные же.
  • @IRT, нет, они все очень консервативные, проблемы если только залезаешь в UB.
    Впрочем тут и в правду залезали в UB и вообще оно работало случайно
  • @qnikst, ub sanitizer, address sanitizer, всё это.