gcc优化标志中断代码

use*_*324 1 c++ optimization gcc pointers

没有设置优化标志时,此代码工作正常:

#include <cstdio>
int main(){
  float *ptr = ({float var[10] = {1,2,3,4,5,6,7,8,9,10}; var;});
  float *ptr1 = ({float var[10]; for(int i_=0;i_<10;i_++)var[i_]=i_+1; var;});
  float *ptr2 = ({float var[10]; var[4]=5; var;});
  printf("\n value = %f %f %f",ptr[4],ptr1[4],ptr2[4]);
}
Run Code Online (Sandbox Code Playgroud)

5 5 5按预期返回.但是当设置优化标志时,它返回5 0 5.

ptr1有问题与循环有关.为什么?也许这是一个错误?

我正在使用最新的4.8.0,经过测试的x64,x86以及其他版本.所有相同的行为.

Cub*_*bbi 8

您正在使用GNU语言扩展,所以我们来看看GNU文档:

在语句表达式中,语句中创建的任何临时语句都会在该语句结束时被销毁.

var 每次都被销毁,并且指向其第一个元素的指针(这是由表达式返回的)不能安全地取消引用.