2017-01-20 21 views
18

मैं निम्नलिखित SSCCE है के लिए segfault कारण बनता है। जीसीसी 6.3 -O3 के तहत सेगमेंटेशन गलती के साथ विफल रहता है।जीसीसी लैम्ब्डा पर कब्जा कर लिया पैरामीटर पैक

मैं [&args...]() के साथ [&]() को प्रतिस्थापित करके, पॉइंटर और संदर्भ द्वारा पैक को स्पष्ट रूप से पारित करके समस्या को ठीक कर सकता हूं। हालांकि, अब तक, मैंने सोचा था कि [&] सभी तर्कों को एक-एक करके सूचीबद्ध करने जैसा ही होगा।

तो क्या गलत हो रहा है?

पीएस: यह -O3 तक सीमित नहीं है। -O0 SEGFAULT नहीं करता है लेकिन अपेक्षित परिणाम वापस नहीं करता है ("नमस्ते विश्व!"):

[:~/tmp] $ g++-6 -std=c++1z param.cpp && ./a.out 

[:~/tmp] $ 

P.P.S: आगे कम SSCCE। अब मुझे -Wall -Wextra के साथ डायग्नोस्टिक भी नहीं मिला है।

+0

केवल अनुकूलन के साथ होता है। – chris

+0

पुष्टि नहीं कर सकता - '-O0' के साथ भी मेरे लिए होता है (परिशिष्ट देखें) – mrks

+1

@ एक्सागोन, बेशक इसे संदर्भ के आधार पर पारित किया जा सकता है। हालांकि, इसकी प्रतिलिपि नहीं बनाई जा सकती है। यहां एक उदाहरण दिया गया है: http://melpon.org/wandbox/permlink/lj4SQhth5iis81FG – chris

उत्तर

9

मुझे दृढ़ता से g ++ बग पर संदेह है।


यहाँ कुछ नोट दिए गए हैं:

  • किसी भी प्राथमिक प्रकार, जैसे के साथ std::string की जगह, intstill does not work
  • clang और VC++ काम करेंगे सिर्फ इरादा
  • संदर्भ कारणों से पैरामीटर पैक गुजर नहीं के रूप में निम्नलिखित आउटपुट के साथ internal compiler error with g++ 7.0.1:

internal compiler error: in make_decl_rtl, at varasm.c:1304

...

Please submit a full bug report, with preprocessed source if appropriate.

Please include the complete backtrace with any bug report. See http://gcc.gnu.org/bugs.html for instructions.

+1

इस पर ध्यान देने के लिए धन्यवाद। मैंने https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79180 पर एक बग दायर किया – mrks

संबंधित मुद्दे