How to understand the Crash triggered by Clang compiler optimization
This article focuses on "how to understand the Crash triggered by Clang compiler optimization", interested friends may wish to take a look. The method introduced in this paper is simple, fast and practical. Let's let the editor take you to learn how to understand the Crash triggered by Clang compiler optimization.
If someone told you that the following C++ function would cause the program crash, what reasons would you think of?
Std::string b2s (bool b) {return b? "true": "false";}
If you give some more descriptions, such as:
Crash will reappear with a certain probability.
Crash is caused by a segment error (SIGSEGV)
The Backtrace on the spot is often incomplete or even completely lost.
Only when the optimization level is above-O2 will it be (easier) to reproduce.
It can only be reproduced under Clang, but not GCC.
Well, some old birds may already have a clue, here is a minimized reproduction procedure and steps:
/ / file crash.cpp#include # include std::string _ _ attribute__ ((noinline)) b2s (bool b) {return b? "true": "false";} union {unsigned char c; bool b;} volatile utint main () {u.c = 0x80; std::cout