gcc无法将标识函数优化为nop

gcc无法将标识函数优化为nop,c,gcc,optimization,clang,C,Gcc,Optimization,Clang,看起来,虽然Clang3.4.2可以将foo优化为no-op,但GCC4.9.1不能也将生成十几条指令。使用-O3在x86-64上测试 我假设优化是安全的,因为结构没有声明为volatile。是否有一些标志允许对此进行优化 struct s{/*任意结构*/ 长m1; charm2[235]; int m3; 双m4; }; 静态结构条(结构x){ 返回x; } void foo(结构s*x){ *x=巴(*x); } 在gcc论坛上报告gcc错误按值返回聚合类型,尤其是大的聚合类型,在C语言中

看起来,虽然Clang3.4.2可以将
foo
优化为no-op,但GCC4.9.1不能也将生成十几条指令。使用
-O3
在x86-64上测试

我假设优化是安全的,因为结构没有声明为volatile。是否有一些标志允许对此进行优化

struct s{/*任意结构*/
长m1;
charm2[235];
int m3;
双m4;
};
静态结构条(结构x){
返回x;
}
void foo(结构s*x){
*x=巴(*x);
}

在gcc论坛上报告gcc错误按值返回聚合类型,尤其是大的聚合类型,在C语言中通常被认为是一种不好的做法。如果没有优化的原因只是到目前为止没有人关心这种行为,我也不会感到惊讶。@R..:这不是我会手工编写的东西,但这可能是一个原因。“是否有一些标志允许对此进行优化?”将
bar
标记为
inline
是否算作“标志”?@Pascal\u Cuoq:甚至
也不总是
在这里起作用。