История изменений
      
        Исправление
      posixbit,
      
        (текущая версия)
      :
    
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
И да:
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. *ptp = (struct Page_Table_Page){{{0}}};
 может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.
      
        Исправление
      posixbit,
      :
    
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. *ptp = (struct Page_Table_Page){{{0}}};
 может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.
      
        Исходная версия
      posixbit,
      :
    
Мой ответ касался общей практики и поведения компилятора по умолчанию, где разработчик не сообщает компилятору явно, что нет libc. В таких случаях замена шаблонов на memcpy — это корректное и ожидаемое поведение. Оптимизатор не обязан «угадывать», что ты вдруг в freestanding-окружении, если ты ему это не сказал.
1. Оптимизатор при генерации IR (GIMPLE) не всегда учитывает все флаги сразу при матчировании паттернов
2. ]*ptp = (struct Page_Table_Page){{{0}}};
 может компилятором рассматриваться не как «ручной» цикл или memset, а как конструкция, которая требует генерации zero-fill через memcpy/memset по архитектурным или ABI-причинам (например, чтобы сохранить выравнивание, tail padding и т. д.).
Теперь по существу: это в любом случае проблема конкретного компилятора, а не проблема языка.