什么是隔离错误路径优化

时间:2014-03-25 06:54:28

标签: gcc optimization compiler-construction compiler-optimization

什么是GCC中的隔离错误路径优化?这个怎么运作 ?

隔离去年添加到gcc的错误路径优化:http://gcc.1065356.n5.nabble.com/RFA-PATCH-Isolate-erroneous-paths-optimization-td980376.html

1 个答案:

答案 0 :(得分:1)

添加的两个标志的文档应该有助于您理解:

  

-fisolate-erroneous-paths-dereference检测由于解除引用NULL指针而触发错误或未定义行为的路径。   从主控制流中隔离这些路径并转动语句   将错误或未定义的行为带入陷阱。

考虑这个人为的代码块:

char
foo (int a)
  {
    char *x = "hello world";
    if (a)      /* (1).  */
      x = NULL; 
    else
      x = x;
    return *x;  /* (2).  */
 }

a != 0我们采用标记为(1)的路径的情况下。这会在(2)处导致未定义的行为,其中x将等于NULL指针。

此优化允许我们将上述内容重写为:

char
foo (int a)
  {
    char *x = "hello world";
    if (a)
      abort ();
    else
      x = x;
    return *x;
 }

好处在于更好的恒定传播,我们不再需要考虑会触发未定义行为的值。

考虑到常量传播现在允许我们将示例重写为:

char
foo (int a)
  {
    if (a)
      abort ();
    return 'h';
 }

作为参考,此优化的另一半适用于由属性限制的函数,以返回null /非null。

  

-fisolate-erroneous-paths-attribute检测由于以某种方式使用NULL值而触发错误或未定义行为的路径   这是return_nonnull或nonnull属性禁止的。隔离   来自主控制流的那些路径并转换语句   进入陷阱的错误或未定义的行为。目前还没有   已启用,但将来可能会被-O2启用。

可以在http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options

找到该文档
相关问题