История изменений
Исправление dimgel, (текущая версия) :
Поэтому компиляторы на практике по возможности располагают статические const данные в read-only секции, чтобы твоя программа при попытке их поменять вовсе упала. Это и произошло.
Не, я снимаю const внутри g() исключительно потому что C не умеет в const. Сам сявый API-вызов эти данные не меняет. Кстати, даже если я этот API-вызов убирал, и вместо этого возвращал x из g(), всё равно падало. А если вручную инлайнил g() в f(), то не падало.
И кстати, падало как раз когда msg был не const.
Вот такие, панимаеш ли, чудеса. Никаких мыслей, кроме разве что что баг вообще в другом месте, а мои эксперименты косвенно его индуцируют, влияя на работу оптимизатора. Но я много попутно и в других местах правил, а тем не менее поведение сохраняется как я описал в ТС.
Исправление dimgel, :
Поэтому компиляторы на практике по возможности располагают статические const данные в read-only секции, чтобы твоя программа при попытке их поменять вовсе упала. Это и произошло.
Не, я снимаю const внутри g() исключительно потому что C не умеет в const. Сам сявый API-вызов эти данные не меняет. Кстати, даже если я этот API-вызов убирал, и вместо этого возвращал x из g(), всё равно падало. А если вручную инлайнил g() в f(), то не падало.
Вот такие, панимаеш ли, чудеса. Никаких мыслей, кроме разве что что баг вообще в другом месте, а мои эксперименты косвенно его индуцируют, влияя на работу оптимизатора. Но я много попутно и в других местах правил, а тем не менее поведение сохраняется как я описал в ТС.
Исходная версия dimgel, :
Поэтому компиляторы на практике по возможности располагают статические const данные в read-only секции, чтобы твоя программа при попытке их поменять вовсе упала. Это и произошло.
Не, я снимаю const внутри g() исключительно потому что C не умеет в const. Сам сявый API-вызов эти данные не меняет. Кстати, даже если я этот API-вызов убирал, и вместо этого возвращал x из g(), всё равно падало. А если вручную инлайнил g() в f(), то не падало.
Вот такие, панимаеш ли, чудеса. Никаких мыслей, кроме разве что что баг вообще в другом месте, а мои эксперименты косвенно его индуцируют, влияют на работу оптимизатора. Но я много попутно и в других местах правил, а тем не менее поведение сохраняется как я описал в ТС.