我查看的WebKit代码是较早的60605版本没囿观察新版本是否已经修复。
hashComponents里期望通过s能取到buf(即c)里的内容但是在O2优化下,hashComponents被inline后c的初始化动作因为乱序优化会被延迟(编译器认為s和c是无关变量),导致从s中取到的是未初始化的值
简单做法是将上述hashComponents里的代码修改为
引入tmpBuf是为了构造一个值拷贝以促进buf完成初始化。volatile關键字必须有否则tmpBuf可能被优化掉。
关于这个问题的简单测试用例:
使用O1和O2分别编译同样的代码并运行
两种优化下输出结果不一致编程時要特别注意这一点。