g ++-8 g ++-9 -O2优化的意外行为

时间:2019-05-27 00:49:45

标签: linux gcc

#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优化进行编译时,程序将打印“ MM”而不是“ GG”。我知道函数verify中缺少return语句,但是我从不使用return 值。有什么解释吗?

顺便说一下,我的测试环境是ubuntu 1804,而g++-7会生成正确的程序。

0 个答案:

没有答案