एक संदिग्ध दावे की जांच करते हुए , मैंने यह छोटा परीक्षण कार्यक्रम लिखा थाnoway.c
int proveit()
{
unsigned int n = 0;
while (1) n++;
return 0;
}
int main()
{
proveit();
return 0;
}
यह परीक्षण, मुझे मिलता है:
$ clang -O noway.c
$ ./a.out
zsh: illegal hardware instruction ./a.out
वाट।
यदि मैं अनुकूलन के बिना संकलन करता हूं तो यह उम्मीद के मुताबिक लटक जाता है। मैंने असेंबली को देखा, और सभी घंटियाँ और सीटी बजने के बिना main
फ़ंक्शन इस तरह दिखता है:
_main: ## @main
pushq %rbp
movq %rsp, %rbp
ud2
जहाँ ud2
स्पष्ट रूप से अपरिभाषित व्यवहार के लिए एक निर्देश है। उपर्युक्त संदिग्ध दावा, "एक फ़ंक्शन जो कभी नहीं लौटता है वह यूबी है", प्रबलित है। मुझे अभी भी विश्वास करना मुश्किल है। वास्तव में!? आप सुरक्षित रूप से स्पिन लूप नहीं लिख सकते हैं?
इसलिए मुझे लगता है कि मेरे सवाल हैं:
- क्या यह सही रीडिंग है जो चल रहा है?
- यदि हां, तो क्या कोई मुझे कुछ आधिकारिक संसाधन की ओर इशारा कर सकता है जो इसे सत्यापित करता है?
- ऐसी स्थिति क्या है जिसमें आप इस प्रकार का अनुकूलन चाहते हैं?
प्रासंगिक जानकारी
$ clang --version
Apple clang version 11.0.0 (clang-1100.0.20.17)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
int n = 0
unsigned int n = 0;
while (1);
unsigned int