Неожиданное поведение оптимизации g ++ - 8 g ++ - 9 -O2 - PullRequest
1 голос
/ 27 мая 2019
#include <stdio.h>
#include <iostream>
__attribute__((optimize("O2"))) static void* verify(char *str)
{
  if (str[0] == 0)
  {
    puts("MM");
    exit(-2);
  }
}

int main(int argc,char **argv)
{
  verify(argv[0]);
  puts("GG");
  return 1;
}

Вот мой код. Когда я компилирую его, используя g++8/g++9/clang++-6/clang++-8 с оптимизацией -O2, программа печатает «ММ» вместо «GG». Я знаю, что в функции verify отсутствует выражение return, но я никогда не использую return значение. Есть ли объяснение?

Кстати, моя тестовая среда ubuntu 1804 и g++-7 генерирует правильную программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...