似乎虽然clang 3.4.2可以将foo
优化为无操作,但gcc 4.9.1不能并且将生成十几条指令。使用-O3
在x86-64上进行了测试。
我认为优化是安全的,因为结构未声明volatile
。是否有一些标志可以将其优化掉?
struct s { /* arbitrary struct */
long long m1;
char m2[235];
int m3;
double m4;
};
static struct s bar(struct s x) {
return x;
}
void foo(struct s *x) {
*x = bar(*x);
}