> On Dec 2, 2020, at 10:41, Andrey Rahmatullin <[email protected]> wrote:
>
> As I've already told you yesterday on IRC, the test succeeds with -O2,
> which is set when building the package.
Furthermore you can actually see a variant of the problem with this test code
even on non-MIPS:
$ uname -m
x86_64
$ cat - >main.cc <http://main.cc/> <<EOT
#include <atomic>
int main(void) {
// a fancy type that needs -mcx16
struct Foo { unsigned __int128 x; };
std::atomic<Foo> y;
y.is_lock_free();
}
EOT
$ g++ -std=c++11 main.cc <http://main.cc/>
/tmp/h43jh.o: In function `std::atomic<main::Foo>::is_lock_free() const’:
main.cc <http://main.cc/>:(text+0x57): undefined reference to
`__atomic_is_lock_free’
collect2: error: ld returned 1 exit status
$ echo $?
1
$ g++ -O3 -std=c++11 main.cc <http://main.cc/>
$ echo $?
0
The compiler can see the atomic and its use are dead code and removes them.