我正在寻找触发GCC或Clang编译过程中不确定性的代码示例。
一个突出的例子是__DATE__
宏的用法。
GCC和Clang具有大量的编译器标志,用于控制编译器内不确定性操作的结果。 -frandom-seed
和-fno-guess-branch-probability
是否有一些受这些标志影响的小例子?
更准确地说:
$ c++ main.cpp -o main && shasum main
aabbccddee
$ c++ main.cpp -o main && shasum main
eeddccbbaa
我正在寻找无宏的代码示例,其中编译器的多次运行会导致不同的输出,但是可以通过例如-frandom-seed
编辑:
相关:来自gcc文档:
-fno-guess-branch-probability:
Sometimes gcc will opt to use a randomized model to guess branch probabilities,
when none are available from either profiling feedback (-fprofile-arcs)
or __builtin_expect.
This means that different runs of the compiler on the same program
may produce different object code.
The default is -fguess-branch-probability at levels -O, -O2, -O3, -Os.